<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    
    <title>GitHub Go Weekly Trending Repositories</title>
    <description>Weekly Trending Repositories of Go on GitHub</description>
    
    <pubDate>Mon, 14 Sep 2026 05:41:46 GMT</pubDate>
    <link>https://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>Tencent/WeKnora</title>
      <link>https://github.com/Tencent/WeKnora</link>
      <description>&lt;p&gt;Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://weknora.weixin.qq.com&quot;&gt;https://weknora.weixin.qq.com&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; 
 &lt;picture&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/logo.png&quot; alt=&quot;WeKnora Logo&quot; height=&quot;120&quot; /&gt; 
 &lt;/picture&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; 
 &lt;picture&gt; 
  &lt;a href=&quot;https://trendshift.io/repositories/15289&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://trendshift.io/api/badge/repositories/15289&quot; alt=&quot;Tencent/WeKnora | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt; &lt;/a&gt; 
 &lt;/picture&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://weknora.weixin.qq.com&quot; target=&quot;_blank&quot;&gt; &lt;img alt=&quot;Official Website&quot; src=&quot;https://img.shields.io/badge/Official%20Website-WeKnora-4e6b99&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://chatbot.weixin.qq.com&quot; target=&quot;_blank&quot;&gt; &lt;img alt=&quot;WeChat Dialog Open Platform&quot; src=&quot;https://img.shields.io/badge/WeChat%20Dialog%20Open%20Platform-5ac725&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://chromewebstore.google.com/detail/jpemjbopikggjlmikmclgbmkhhopjdgd&quot; target=&quot;_blank&quot;&gt; &lt;img alt=&quot;Chrome Extension&quot; src=&quot;https://img.shields.io/badge/Chrome%20Extension-WeKnora-4285F4&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://clawhub.ai/lyingbug/weknora&quot; target=&quot;_blank&quot;&gt; &lt;img alt=&quot;ClawHub Skill&quot; src=&quot;https://img.shields.io/badge/ClawHub%20Skill-WeKnora-ff6b35&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://www.npmjs.com/package/@wxg-prc-cpg/dsh-weknora&quot; target=&quot;_blank&quot;&gt; &lt;img alt=&quot;npm @wxg-prc-cpg/dsh-weknora&quot; src=&quot;https://img.shields.io/npm/v/@wxg-prc-cpg/dsh-weknora?label=dsh-weknora&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://github.com/Tencent/WeKnora/raw/main/LICENSE&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/License-MIT-ffffff?labelColor=d4eaf7&amp;amp;color=2e6cc4&quot; alt=&quot;License&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt; &lt;img alt=&quot;Version&quot; src=&quot;https://img.shields.io/badge/version-0.8.0-2e6cc4?labelColor=d4eaf7&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; | &lt;b&gt;English&lt;/b&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/README_CN.md&quot;&gt;&lt;b&gt;简体中文&lt;/b&gt;&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/README_JA.md&quot;&gt;&lt;b&gt;日本語&lt;/b&gt;&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/README_KO.md&quot;&gt;&lt;b&gt;한국어&lt;/b&gt;&lt;/a&gt; | &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;/p&gt;
&lt;h4 align=&quot;center&quot;&gt; &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/#-overview&quot;&gt;Overview&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/#-architecture&quot;&gt;Architecture&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/#-key-features&quot;&gt;Key Features&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/#-getting-started&quot;&gt;Getting Started&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/#-api-reference&quot;&gt;API Reference&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/#-developer-guide&quot;&gt;Developer Guide&lt;/a&gt;&lt;/p&gt; &lt;/h4&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;h1&gt;💡 WeKnora — Turn Documents into Living Knowledge with RAG, Agents and Auto-Wiki&lt;/h1&gt; 
&lt;h2&gt;📌 Overview&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://weknora.weixin.qq.com&quot;&gt;&lt;strong&gt;WeKnora&lt;/strong&gt;&lt;/a&gt; is an open-source, LLM-powered knowledge framework built for enterprise-grade document understanding, semantic retrieval, and autonomous reasoning.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/19b28ce2-a62f-4f54-b289-c983576259bc&quot;&gt;https://github.com/user-attachments/assets/19b28ce2-a62f-4f54-b289-c983576259bc&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;2:25 · 1080p · English narration &amp;amp; captions.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;It is organized around three core capabilities: &lt;strong&gt;RAG-based Quick Q&amp;amp;A&lt;/strong&gt; for everyday lookups, a &lt;strong&gt;ReAct Agent&lt;/strong&gt; that autonomously orchestrates retrieval, MCP tools, a &lt;strong&gt;tenant skill catalog&lt;/strong&gt;, session-persistent &lt;strong&gt;Docker / E2B / Cube sandboxes&lt;/strong&gt; and web search to handle complex multi-step tasks, and a brand-new &lt;strong&gt;Wiki Mode&lt;/strong&gt; in which agents distill raw documents into a self-maintaining, interlinked markdown knowledge base with an interactive knowledge graph, complete with manual editing, revision history and one-click rollback. &lt;strong&gt;Cross-session long-term memory&lt;/strong&gt; remembers who you are and what you keep asking about. Knowledge curation is equally hands-on: a &lt;strong&gt;tree-structured folder view&lt;/strong&gt; preserves the directory layout of uploads, and &lt;strong&gt;chunk editing with revision history&lt;/strong&gt; lets retrieval chunks be edited, diffed and reverted like documents. Combined with multi-source ingestion (Feishu wiki / Feishu Drive / GitLab / Tencent IMA / Notion / Yuque / RSS, and growing), &lt;strong&gt;website embed widgets&lt;/strong&gt; for publishing agents to external sites, &lt;strong&gt;scoped API keys with a principal model&lt;/strong&gt; for programmatic integrations, &lt;strong&gt;multi-instance storage backends&lt;/strong&gt; per workspace for flexible data placement, 20+ LLM provider integrations (including LiteLLM), full Langfuse observability plus a &lt;strong&gt;runtime task-queue dashboard with worker-pool governance&lt;/strong&gt;, &lt;strong&gt;enterprise-ready multi-workspace RBAC&lt;/strong&gt; (4-tier role matrix + per-resource ownership + per-workspace audit log), and a fully self-hostable modular architecture, WeKnora turns scattered documents into a queryable, reasoning-capable, continuously evolving knowledge asset.&lt;/p&gt; 
&lt;p&gt;The framework supports auto-syncing knowledge from Feishu, GitLab, Tencent IMA, Notion, and Yuque (more data sources coming soon), handles 10+ document formats including PDF, Word, images, Excel and XMind, and can serve Q&amp;amp;A directly through IM channels like WeCom, Feishu, Slack, and Telegram. It is compatible with major LLM providers including OpenAI, DeepSeek, Qwen (Alibaba Cloud), Zhipu, Hunyuan, Gemini, MiniMax, NVIDIA, LiteLLM, and Ollama. Office files can be parsed in-process with &lt;strong&gt;anydoc&lt;/strong&gt;. Its fully modular design allows swapping LLMs, vector databases, and storage backends, with support for local and private cloud deployment ensuring complete data sovereignty. WeKnora also integrates with &lt;strong&gt;Langfuse&lt;/strong&gt; for comprehensive observability into agent reasoning, token usage, and pipeline tracing.&lt;/p&gt; 
&lt;h2&gt;✨ Latest Updates&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;v0.8.0&lt;/strong&gt; — &lt;strong&gt;Skill sandbox runtime&lt;/strong&gt; (session-persistent Docker / E2B / Cube backends with per-tenant network policy; Local host-process backend removed; Docker opt-in); &lt;strong&gt;tenant skill catalog&lt;/strong&gt; (install from ClawHub / SkillHub / git / zip, per-sandbox snapshots, live progress, file browse/edit, personal and workspace env vars); &lt;strong&gt;cross-session long-term memory&lt;/strong&gt; (profile / preference / fact / task / interest, auto-extract with confirm, &lt;code&gt;search_memory&lt;/code&gt;); &lt;strong&gt;in-process anydoc office parser&lt;/strong&gt;; official &lt;strong&gt;DeepSeek Harness plugin&lt;/strong&gt; &lt;code&gt;@wxg-prc-cpg/dsh-weknora&lt;/code&gt;; GitLab and Tencent IMA data sources; LiteLLM; Exa and Metaso web search; XMind parsing; chat artifacts, question outline and timestamps; context compaction and provider prompt-cache markers. Plus OIDC JWKS verification, optional complex passwords, document auto-tagging, and broad sandbox/security hardening. See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.7.2&lt;/strong&gt; — Launched the &lt;strong&gt;official product documentation site&lt;/strong&gt; (VitePress; six sections, ~50 pages covering ~360 API endpoints and ~150 environment variables, with standalone Docker/Nginx deployment, quickstart sample data and a local MCP demo); &lt;strong&gt;knowledge base folder tree&lt;/strong&gt; (upload paths stored as first-class data, browse/rename/re-file documents like a file manager); &lt;strong&gt;chunk editing with revision history&lt;/strong&gt; (edit retrieval chunks in the UI, per-version diff and rollback, automatic reindexing, plus custom document metadata); &lt;strong&gt;Wiki page revision history&lt;/strong&gt; (snapshots + line-level diff + one-click rollback + in-browser manual editing); &lt;strong&gt;directly loadable file URLs&lt;/strong&gt; via &lt;code&gt;resource_urls=public&lt;/code&gt; / &lt;code&gt;RESOURCE_URL_MODE&lt;/code&gt; (third-party apps render images and files without a second authenticated proxy call); &lt;strong&gt;Feishu Drive data source&lt;/strong&gt; and docx sync through the blocks API; batch document tagging; &lt;strong&gt;MCP Server 1.1.x&lt;/strong&gt; (migrated to the mcp 2.x high-level API, official PyPI package &lt;code&gt;tencent-weknora-mcp&lt;/code&gt;, new &lt;code&gt;create_knowledge_from_text&lt;/code&gt; and &lt;code&gt;list_shared_knowledge_bases&lt;/code&gt; for 29 tools total); AWS S3 default credential chain (IAM Role / IRSA); local HTML upload parsing; QQBot markdown replies; new PR CI checks for app / frontend / docreader / mcp-server. Plus large-scale router and &lt;code&gt;modelcontext&lt;/code&gt; refactors, rerank and chunking quality work, and broad stability fixes. See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.7.1&lt;/strong&gt; — New &lt;strong&gt;Yunzhijia (云之家) IM integration&lt;/strong&gt; (WebSocket + image messages + markdown replies); &lt;strong&gt;Volcengine rerank&lt;/strong&gt; provider (with request batching) and &lt;strong&gt;Zhipu AI web search&lt;/strong&gt; provider; &lt;strong&gt;platform-scoped API keys&lt;/strong&gt; for control-plane automation (tenant management, system settings, runtime queues, audit logs); &lt;strong&gt;per-KB activity audit trail&lt;/strong&gt;; FAQ management enhancements (filtering, tagging, export, import tracking); &lt;strong&gt;Langfuse OTLP/OTel tracing&lt;/strong&gt; migration with W3C traceparent propagation; chat header actions with one-click &lt;strong&gt;Markdown export&lt;/strong&gt; and wiki tool results in the references drawer; prompt-cache observability; session channel governance (admin-scoped IM/embed/API sessions); resilient Feishu large-wiki sync; and removal of the legacy Neo4j conversation-memory dependency. Plus broad slug-integrity, SSRF-transport, and state-sync hardening. See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.7.0&lt;/strong&gt; — Fine-grained &lt;strong&gt;scoped API keys &amp;amp; principal model&lt;/strong&gt; (capability-level grants + per-KB restriction + API integration playground); &lt;strong&gt;runtime task-queue observability dashboard &amp;amp; worker-pool governance&lt;/strong&gt; (per-stage pools + per-model concurrency governors + failed-task inspection/retry); &lt;strong&gt;multi-instance storage backends&lt;/strong&gt; (multiple storage instances per workspace, per-KB binding, default instance); &lt;strong&gt;session-scoped temporary attachments&lt;/strong&gt; (async image/doc parsing + combined limits); question &amp;amp; follow-up suggestions; stable resource registry with LLM-context alias compaction; &lt;code&gt;@Skill / @MCP&lt;/code&gt; mentions with scoped agent runtime; mid-conversation MCP OAuth; QQBot &amp;amp; Lark (Feishu International) IM integration; Redis TLS; Requesty model provider + Keenable web search; tenantless provisioning &amp;amp; gated self-service workspaces; admin password reset; knowledge base duplicate flow; &lt;code&gt;weknora&lt;/code&gt; CLI v0.10. Plus broad security hardening (SSRF, secret redaction, SQL validation, IDOR). See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.6.3&lt;/strong&gt; — Website embed widget &amp;amp; Integrations Center (secure-mode token exchange + rate limits); chat experience overhaul (citation popovers, RAG pipeline progress, streaming markdown); document multi-tag &amp;amp; batch reparse; Wiki folders &amp;amp; hierarchy navigation; RSS data source; MCP OAuth2; EPUB / MHTML parsing; agent model-readiness checks; model test debugger; session source filter; workspace deletion UI. See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.6.2&lt;/strong&gt; — Per-upload process configuration with upload-confirm dialog; document reparse with &lt;code&gt;process_config&lt;/code&gt;; &lt;code&gt;weknora&lt;/code&gt; CLI v0.9 (bundled Agent Skills, &lt;code&gt;session stop&lt;/code&gt;, auth/profile harmonization); KB marquee multi-select; HNSW index for 1024-dim pgvector embeddings; chat resources store refactor; Langfuse-only tracing (Jaeger removed). See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.6.1&lt;/strong&gt; — Document parsing trace timeline (Langfuse-style span tree with stage-by-stage progress + stop-parse); OpenSearch vector store driver; declarative built-in models via YAML; system admin &amp;amp; consolidated platform settings + audit log; new-user onboarding guide; settings UI redesign; &lt;code&gt;weknora&lt;/code&gt; CLI v0.7 / v0.8 (agent-first wire contract, NDJSON, &lt;code&gt;--dry-run&lt;/code&gt;); OpenDataLoader + PaddleOCR-VL parsers; MCP server multi-transport (stdio / SSE / HTTP); per-model thinking-mode config; Tencent LKEAP rerank + native Gemini embeddings + MiniMax-M3. See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.6.0&lt;/strong&gt; — Workspace RBAC (4-tier role matrix &lt;code&gt;Owner&lt;/code&gt; / &lt;code&gt;Admin&lt;/code&gt; / &lt;code&gt;Contributor&lt;/code&gt; / &lt;code&gt;Viewer&lt;/code&gt; + per-KB ownership + per-workspace audit log), workspace member management &amp;amp; multi-workspace UX, self-service workspaces; &lt;code&gt;weknora&lt;/code&gt; CLI v0.4 GA with &lt;code&gt;mcp serve&lt;/code&gt;; KB retrieval fan-out across vector stores; AES-256-GCM credential encryption + docreader gRPC TLS + Token; Zhipu embedder + Huawei OBS; server-side user preferences; Go 1.26.0. See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/RBAC%E8%AF%B4%E6%98%8E.md&quot;&gt;&lt;code&gt;docs/RBAC说明.md&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/CHANGELOG.md&quot;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.5.2&lt;/strong&gt; — Wiki ingest scales to 40k-document KBs (task queue + DLQ); MCP human-in-the-loop tool approval; Anthropic / Apache Doris / Tencent VectorDB / KS3 / SearXNG backends; adaptive 3-tier chunking with live preview; global ⌘K command palette; Yuque connector + WeChat Mini Program; &lt;code&gt;weknora&lt;/code&gt; CLI preview.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.5.1&lt;/strong&gt; — Knowledge-base batch management; workspace-wide IM channels overview; session search + user-scoped pinning; unified Model / Web Search / MCP settings cards; per-agent LLM timeout; desktop workspace switching.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.5.0&lt;/strong&gt; — Wiki Mode GA — agents auto-generate structured, interlinked Markdown wiki pages with a knowledge graph; wiki browser + visual graph in the UI.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.4.0&lt;/strong&gt; — WeKnora Cloud (hosted LLM + parsing); Chrome Extension; ClawHub Skill; WeChat IM; attachment processing; Azure OpenAI / Alibaba OSS; Notion connector; Baidu + Ollama web search; VectorStore management.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.3.6&lt;/strong&gt; — ASR (audio); Feishu data-source auto-sync; OIDC; IM quote-reply context + thread-based sessions; document summarization; Tavily search; parallel tool calling; agent @mention scope restriction.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.3.5&lt;/strong&gt; — Telegram / DingTalk / Mattermost IM; IM slash commands + QA queue; suggested questions; VLM auto-describe MCP tool images; Novita AI; channel tracking.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.3.4&lt;/strong&gt; — WeCom / Feishu / Slack IM; multimodal image support; NVIDIA model API; Weaviate; AWS S3; AES-256-GCM API-key encryption; built-in MCP service; hybrid-search optimization; &lt;code&gt;final_answer&lt;/code&gt; tool.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.3.3&lt;/strong&gt; — Parent-child chunking; KB pinning; fallback response; passage cleaning for rerank; storage auto-creation; Milvus.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.3.2&lt;/strong&gt; — Knowledge Search entry; per-source parser &amp;amp; storage engine config; image rendering in local storage; document preview; Volcengine TOS; Mermaid rendering; batch session management; memory graph preview.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.3.0&lt;/strong&gt; — Shared Space; Agent Skills + sandboxed execution; custom agents; Data Analyst agent; thinking mode; Bing / Google web search; API Key auth; Helm chart; Korean i18n; Qdrant.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v0.2.0&lt;/strong&gt; — Agent Mode (ReACT); multi-type knowledge bases (FAQ + document); conversation strategy config; DuckDuckGo web search; MCP tool integration; new UI with agent mode switching; MQ async task management.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📱 Interface Showcase&lt;/h2&gt; 
&lt;table&gt; 
 &lt;tbody&gt;
  &lt;tr&gt; 
   &lt;td colspan=&quot;2&quot; align=&quot;center&quot;&gt;&lt;b&gt;🛠️ Skill Sandbox Chat · generate and preview a Word file&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/skill-sandbox-chat.png&quot; alt=&quot;Skill sandbox conversation generating and previewing a Word document&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt;&lt;b&gt;📦 Skill Catalog · install onto an E2B sandbox&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/skill-catalog.png&quot; alt=&quot;Workspace skill catalog with docx pptx pdf installed on E2B&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
   &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt;&lt;b&gt;🤖 Agent Mode · search, read a skill, write sandbox files&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/agent-qa.png&quot; alt=&quot;Agent searching the knowledge base, reading the docx skill, and writing a sandbox script&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td colspan=&quot;2&quot; align=&quot;center&quot;&gt;&lt;b&gt;💬 Intelligent Q&amp;amp;A Conversation&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/qa.png&quot; alt=&quot;Intelligent Q&amp;amp;A Conversation&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt;&lt;b&gt;📖 Wiki Browser&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/wiki-browser.png&quot; alt=&quot;Wiki Browser&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
   &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt;&lt;b&gt;🕸️ Wiki Knowledge Graph&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/wiki-graph.png&quot; alt=&quot;Wiki Knowledge Graph&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt;&lt;b&gt;🕘 Wiki Page Revision History &amp;amp; Rollback&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/wiki-revision-history.png&quot; alt=&quot;Wiki Page Revision History and Rollback&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
   &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt;&lt;b&gt;✂️ Chunk Editing &amp;amp; Revision History&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/kb-chunk-edit.png&quot; alt=&quot;Chunk Editing and Revision History&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt;&lt;b&gt;📁 Folder Tree &amp;amp; Batch Operations&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/kb-document-list.png&quot; alt=&quot;Knowledge Base Folder Tree and Batch Operations&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
   &lt;td width=&quot;50%&quot; align=&quot;center&quot;&gt;&lt;b&gt;🔭 Observability · Langfuse Tracing&lt;/b&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/langfuse.png&quot; alt=&quot;Observability Langfuse Tracing&quot; width=&quot;100%&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt;
&lt;/table&gt; 
&lt;h2&gt;🏗️ Architecture&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/architecture.png&quot; alt=&quot;weknora-architecture.png&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Fully modular pipeline from document parsing, vectorization, and retrieval to LLM inference — every component is swappable and extensible. Supports local / private cloud deployment with full data sovereignty and a zero-barrier Web UI for quick onboarding.&lt;/p&gt; 
&lt;h2&gt;🧩 Feature Overview&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Intelligent Conversation&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Capability&lt;/th&gt; 
   &lt;th&gt;Details&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Intelligent Reasoning&lt;/td&gt; 
   &lt;td&gt;ReACT progressive multi-step reasoning, autonomously orchestrating knowledge retrieval, MCP tools, skill sandboxes, and web search&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Quick Q&amp;amp;A&lt;/td&gt; 
   &lt;td&gt;RAG-based Q&amp;amp;A over knowledge bases for fast and accurate answers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Wiki Mode&lt;/td&gt; 
   &lt;td&gt;Agent-driven auto-generation of structured, interlinked markdown Wiki pages from raw documents; in-browser manual editing, page revision history, line-level diff and one-click rollback&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Skill Catalog &amp;amp; Sandbox&lt;/td&gt; 
   &lt;td&gt;Workspace skill catalog (ClawHub / SkillHub / git / zip) installed onto session-persistent Docker / E2B / Cube sandboxes; &lt;code&gt;shell_exec&lt;/code&gt;, file tools, artifacts, per-config network policy; Local host-process backend removed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Long-term Memory&lt;/td&gt; 
   &lt;td&gt;Cross-session memory (profile / preference / fact / task / interest) with auto-extract, user confirm, and on-demand &lt;code&gt;search_memory&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Tool Calling&lt;/td&gt; 
   &lt;td&gt;Built-in tools, MCP tools (incl. OAuth2 remote services, mid-conversation OAuth), web search; &lt;code&gt;@Skill / @MCP&lt;/code&gt; mentions to scope the agent runtime per turn&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Conversation Strategy&lt;/td&gt; 
   &lt;td&gt;Online Prompt editing, retrieval threshold tuning, multi-turn context awareness, per-agent citation output toggle&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Suggested Questions&lt;/td&gt; 
   &lt;td&gt;Auto-generated question suggestions and after-answer follow-ups based on knowledge base content&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Temporary Attachments&lt;/td&gt; 
   &lt;td&gt;Session-scoped image / document uploads with async parsing for one-off Q&amp;amp;A, with a combined image + attachment limit&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Citations &amp;amp; RAG Progress&lt;/td&gt; 
   &lt;td&gt;Inline citation popovers and a references drawer (web / KB source distinction), shared markdown rendering, and stage-by-stage RAG pipeline progress in chat&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Session Management&lt;/td&gt; 
   &lt;td&gt;Filter and group sidebar sessions by source (Web / IM / Embed), with inline session-title rename&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Knowledge Management&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Capability&lt;/th&gt; 
   &lt;th&gt;Details&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Knowledge Base Types&lt;/td&gt; 
   &lt;td&gt;FAQ / Document / Wiki with folder import, URL import, multi-tag management, and online entry&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Folder Tree&lt;/td&gt; 
   &lt;td&gt;Folder uploads keep their original directory structure, with a sidebar tree for browsing, folder rename, and re-filing documents into another folder&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Chunk Editing &amp;amp; Revisions&lt;/td&gt; 
   &lt;td&gt;Edit retrieval chunks directly in the UI with per-version snapshots, diff and one-click rollback, and automatic reindexing after an edit; generated questions can be added, edited, deleted and regenerated; custom document metadata supported&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Per-Upload Process Config&lt;/td&gt; 
   &lt;td&gt;Override parser, chunking, multimodal (VLM / ASR), graph extraction, and question generation per upload batch via upload-confirm dialog or &lt;code&gt;process_config&lt;/code&gt; API; reparse with new settings&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Batch Reparse&lt;/td&gt; 
   &lt;td&gt;Re-queue parsing for multiple documents at once with optional per-batch &lt;code&gt;process_config&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Data Source Import&lt;/td&gt; 
   &lt;td&gt;Auto-sync from Feishu wiki / Feishu Drive / Lark / GitLab / Tencent IMA / Notion / Yuque / RSS feeds (more data sources coming soon); incremental and full sync&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Document Formats&lt;/td&gt; 
   &lt;td&gt;PDF / Word / Txt / Markdown / HTML / EPUB / MHTML / Images / CSV / Excel / PPT / JSON / XMind&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Auto-Tagging&lt;/td&gt; 
   &lt;td&gt;After parse, pick matching tags from the knowledge base&#39;s existing set without creating tags or overwriting manual ones&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Retrieval Strategies&lt;/td&gt; 
   &lt;td&gt;BM25 sparse / Dense retrieval / GraphRAG / parent-child chunking / HNSW-accelerated pgvector (1024-dim) / multi-dimensional indexing&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Batch Selection &amp;amp; Tagging&lt;/td&gt; 
   &lt;td&gt;Marquee drag-select multiple documents in the KB list for batch reparse and batch tagging (common tags pre-selected)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;E2E Testing&lt;/td&gt; 
   &lt;td&gt;Full-pipeline visualization with recall hit rate, BLEU / ROUGE metric evaluation&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Integrations &amp;amp; Extensions&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Capability&lt;/th&gt; 
   &lt;th&gt;Details&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;LLMs&lt;/td&gt; 
   &lt;td&gt;OpenAI / Azure OpenAI / Anthropic (Claude) / DeepSeek / Qwen (Alibaba Cloud) / Zhipu / Hunyuan / Doubao (Volcengine) / Gemini / MiniMax / NVIDIA / Novita AI / SiliconFlow / OpenRouter / Requesty / LiteLLM / Ollama&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Embeddings&lt;/td&gt; 
   &lt;td&gt;Ollama / BGE / GTE / Zhipu / OpenAI-compatible APIs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Vector DBs&lt;/td&gt; 
   &lt;td&gt;PostgreSQL (pgvector) / Elasticsearch / OpenSearch / Milvus / Weaviate / Qdrant / Apache Doris / Tencent VectorDB&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Object Storage&lt;/td&gt; 
   &lt;td&gt;Local / MinIO / AWS S3 (IAM Role / IRSA default credential chain) / Volcengine TOS / Alibaba Cloud OSS / Kingsoft Cloud KS3 / Huawei Cloud OBS; &lt;strong&gt;multiple storage instances per workspace&lt;/strong&gt; with per-KB binding and a default instance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;IM Channels&lt;/td&gt; 
   &lt;td&gt;WeCom / Feishu / Lark (Feishu International) / QQBot / Slack / Telegram / DingTalk / Mattermost / WeChat / Yunzhijia&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Website Embed&lt;/td&gt; 
   &lt;td&gt;Publish agents via embed widget with domain allowlists, rate limits, and secure-mode token exchange&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Web Search&lt;/td&gt; 
   &lt;td&gt;DuckDuckGo / Bing / Google / Tavily / Baidu / Ollama / SearXNG / Keenable / Zhipu AI / Exa / Metaso&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;API Integration&lt;/td&gt; 
   &lt;td&gt;Scoped API keys (capability-level grants + per-KB restriction + throttled last-used tracking) with an API integration playground; MCP OAuth and embed sessions isolated per principal; &lt;code&gt;resource_urls=public&lt;/code&gt; returns directly loadable file/image URLs, removing the second authenticated proxy call&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;MCP Server&lt;/td&gt; 
   &lt;td&gt;Official PyPI package &lt;code&gt;tencent-weknora-mcp&lt;/code&gt; with 29 tools over stdio / SSE / HTTP transports&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Capability&lt;/th&gt; 
   &lt;th&gt;Details&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Deployment&lt;/td&gt; 
   &lt;td&gt;Local / Docker / Kubernetes (Helm) with private and offline support&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;UI&lt;/td&gt; 
   &lt;td&gt;Web UI / RESTful API / CLI (&lt;code&gt;weknora&lt;/code&gt;) / Chrome Extension / Website Embed Widget / WeChat Mini Program&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Access Control&lt;/td&gt; 
   &lt;td&gt;Workspace RBAC with 4-tier role matrix (Owner / Admin / Contributor / Viewer), per-KB resource ownership, per-workspace audit log, invite-only workspaces, tenantless provisioning &amp;amp; gated self-service workspace creation, admin password reset (session revocation), cross-workspace superuser, scoped API keys&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Security&lt;/td&gt; 
   &lt;td&gt;AES-256-GCM at-rest encryption for API keys and MCP / data-source credentials with graceful key rotation; gRPC TLS + Token between app and docreader; Redis TLS; SSRF-safe HTTP client (data sources, URL import, redirect chains); secret redaction in responses; skill sandbox isolation (Docker opt-in / E2B / Cube) with per-config network policy; OIDC ID-token JWKS verification; optional complex-password policy&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Observability&lt;/td&gt; 
   &lt;td&gt;Integrated Langfuse (sole tracing backend) for ReAct loops, token tracking, tool calls, and pipeline tracing; built-in Langfuse-style document parsing trace timeline with stage-by-stage progress; system-admin runtime task-queue dashboard (queue depth, per-model concurrency, failed-task inspection &amp;amp; manual retry)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Task Management&lt;/td&gt; 
   &lt;td&gt;MQ async tasks with per-stage worker-pool governance (core / post-process / enrichment / maintenance + elastic shared pool, plus an independent Wiki pool) and per-model background concurrency governors; automatic database migration on version upgrade&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Model Management&lt;/td&gt; 
   &lt;td&gt;Centralized config, declarative built-in models via YAML, per-knowledge-base model selection, per-model thinking-mode and embedding-dimension overrides, interactive model test debugger, multi-workspace built-in model sharing, WeKnora Cloud hosted models and parsing&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;🧩 Chrome Extension&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/jpemjbopikggjlmikmclgbmkhhopjdgd&quot;&gt;&lt;strong&gt;WeKnora Chrome Extension&lt;/strong&gt;&lt;/a&gt; lets you capture web content directly into your WeKnora knowledge base. Select text, images, or entire pages in the browser and save them as knowledge entries with one click — no copy-paste or file upload needed.&lt;/p&gt; 
&lt;h2&gt;📱 WeChat Mini Program&lt;/h2&gt; 
&lt;p&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/miniprogram/README.md&quot;&gt;WeKnora Mini Program&lt;/a&gt; provides a lightweight mobile client for configuring WeKnora API access, selecting knowledge bases, importing URLs, and asking knowledge chat from WeChat.&lt;/p&gt; 
&lt;h2&gt;🦞 ClawHub Skill&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://clawhub.ai/lyingbug/weknora&quot;&gt;&lt;strong&gt;WeKnora ClawHub Skill&lt;/strong&gt;&lt;/a&gt; is a WeKnora skill published on the ClawHub platform. Once installed, it enables document import (file / URL / Markdown), hybrid search (vector + keyword) across knowledge bases, and knowledge entry management — all through the WeKnora REST API.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Document Import&lt;/strong&gt; — Upload files, import web pages, or write Markdown knowledge via the agent&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Hybrid Search&lt;/strong&gt; — Search within or across knowledge bases with vector + keyword retrieval&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Knowledge Management&lt;/strong&gt; — List, browse, edit, and delete knowledge entries programmatically&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🐋 DeepSeek Harness Plugin&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/package/@wxg-prc-cpg/dsh-weknora&quot;&gt;&lt;strong&gt;&lt;code&gt;@wxg-prc-cpg/dsh-weknora&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; is the official &lt;a href=&quot;https://github.com/deepseek-ai/deepseek-harness&quot;&gt;DeepSeek Harness&lt;/a&gt; (&lt;code&gt;dsh&lt;/code&gt;) plugin (&lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/packages/dsh-weknora/README.md&quot;&gt;docs&lt;/a&gt;). The harness ships no retrieval, embedding or knowledge-base capability of its own, so the plugin gives a coding agent your documents: &lt;code&gt;dsh plugin --profile web add @wxg-prc-cpg/dsh-weknora&lt;/code&gt;, point it at a deployment, and four read-only tools appear in the agent&#39;s tool set.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;weknora_search&lt;/code&gt;&lt;/strong&gt; — hybrid retrieval returning source passages verbatim, each with a reusable &lt;code&gt;knowledge_id&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;weknora_read_document&lt;/code&gt;&lt;/strong&gt; — one document&#39;s passages reassembled in order, with paging&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;weknora_ask&lt;/code&gt;&lt;/strong&gt; — WeKnora&#39;s own composed answer with citations, over the RAG or the ReAct pipeline&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;weknora_list_knowledge_bases&lt;/code&gt;&lt;/strong&gt; — knowledge base names and ids, so the agent can scope its own search&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;⌨️ Command-Line Interface&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;weknora&lt;/code&gt; is the official CLI for driving the API from a terminal or an AI agent. It is &lt;strong&gt;agent-first&lt;/strong&gt;: every command emits a stable JSON envelope by default (with typed error codes mapped to exit codes), and &lt;code&gt;--format text&lt;/code&gt; renders for humans. It also serves a curated MCP tool surface (&lt;code&gt;weknora mcp serve&lt;/code&gt;) and ships bundled Agent Skills.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;weknora profile add prod --host https://kb.example.com --use
weknora auth login
weknora kb list
weknora link --kb my-knowledge-base    # bind the current directory
weknora doc upload notes.md
weknora chat &quot;summarise the design doc&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For headless / CI use, set &lt;code&gt;WEKNORA_API_KEY&lt;/code&gt; + &lt;code&gt;WEKNORA_HOST&lt;/code&gt; and skip &lt;code&gt;auth login&lt;/code&gt; entirely — no credentials written to disk.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/cli/README.md&quot;&gt;&lt;code&gt;cli/README.md&lt;/code&gt;&lt;/a&gt; for install + 5-minute quickstart and &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/cli/AGENTS.md&quot;&gt;&lt;code&gt;cli/AGENTS.md&lt;/code&gt;&lt;/a&gt; for the operational contract AI agents rely on.&lt;/p&gt; 
&lt;h2&gt;🚀 Getting Started&lt;/h2&gt; 
&lt;h3&gt;🛠 Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://docs.docker.com/compose/&quot;&gt;Docker Compose&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://git-scm.com/&quot;&gt;Git&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;📦 Installation &amp;amp; Launch&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/Tencent/WeKnora.git
cd WeKnora
cp .env.example .env   # Edit .env as needed, see comments in the file
docker compose pull     # Pull the latest images
docker compose up -d    # Start core services
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Once started, visit &lt;strong&gt;&lt;a href=&quot;http://localhost&quot;&gt;http://localhost&lt;/a&gt;&lt;/strong&gt; to get started.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;To use a local Ollama model, run &lt;code&gt;ollama serve &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/code&gt; first.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;🔄 Upgrading&lt;/h3&gt; 
&lt;p&gt;If you already have WeKnora running and downloaded a newer release:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Set WEKNORA_VERSION in .env to the target release (e.g. 0.7.0), or keep latest
docker compose pull     # Pull images matching WEKNORA_VERSION
docker compose up -d    # Recreate containers with new images
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;docker compose up -d&lt;/code&gt; alone reuses locally cached images and may leave the UI version out of sync with the release you downloaded.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;🔧 Optional Services (Docker Compose Profiles)&lt;/h3&gt; 
&lt;p&gt;Add &lt;code&gt;--profile&lt;/code&gt; flags to enable additional components. Multiple profiles can be combined:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Profile&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;em&gt;(default)&lt;/em&gt;&lt;/td&gt; 
   &lt;td&gt;Core services&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;docker compose pull &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;full&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;All features&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;docker compose --profile full pull &amp;amp;&amp;amp; docker compose --profile full up -d&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;neo4j&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Knowledge Graph (Neo4j)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;docker compose --profile neo4j pull &amp;amp;&amp;amp; docker compose --profile neo4j up -d&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;minio&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Object Storage (MinIO)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;docker compose --profile minio pull &amp;amp;&amp;amp; docker compose --profile minio up -d&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;langfuse&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Tracing (Langfuse)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;docker compose --profile langfuse pull &amp;amp;&amp;amp; docker compose --profile langfuse up -d&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Combine profiles: &lt;code&gt;docker compose --profile neo4j --profile minio pull &amp;amp;&amp;amp; docker compose --profile neo4j --profile minio up -d&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;Stop services: &lt;code&gt;docker compose down&lt;/code&gt;&lt;/p&gt; 
&lt;h3&gt;🌐 Service URLs&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Service&lt;/th&gt; 
   &lt;th&gt;URL&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Web UI&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;http://localhost&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Backend API&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Langfuse Tracing&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;http://localhost:3000&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;MCP Server&lt;/h2&gt; 
&lt;p&gt;Please refer to the &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/mcp-server/MCP_CONFIG.md&quot;&gt;MCP Configuration Guide&lt;/a&gt; for the necessary setup.&lt;/p&gt; 
&lt;h2&gt;🔌 Using WeChat Dialog Open Platform&lt;/h2&gt; 
&lt;p&gt;WeKnora serves as the core technology framework for the &lt;a href=&quot;https://chatbot.weixin.qq.com&quot;&gt;WeChat Dialog Open Platform&lt;/a&gt;, providing a more convenient usage approach:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Zero-code Deployment&lt;/strong&gt;: Simply upload knowledge to quickly deploy intelligent Q&amp;amp;A services within the WeChat ecosystem, achieving an &quot;ask and answer&quot; experience&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Efficient Question Management&lt;/strong&gt;: Support for categorized management of high-frequency questions, with rich data tools to ensure accurate, reliable, and easily maintainable answers&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;WeChat Ecosystem Integration&lt;/strong&gt;: Through the WeChat Dialog Open Platform, WeKnora&#39;s intelligent Q&amp;amp;A capabilities can be seamlessly integrated into WeChat Official Accounts, Mini Programs, and other WeChat scenarios, enhancing user interaction experiences&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📘 API Reference&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Official product documentation&lt;/strong&gt;: &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/website-docs/README.md&quot;&gt;&lt;code&gt;website-docs/&lt;/code&gt;&lt;/a&gt; — the complete documentation set organized as Getting Started → Architecture → Features → API → Clients → Development, covering ~360 API endpoints, ~150 environment variables, and 9 extension points. The directory is also a VitePress site: run &lt;code&gt;cd website-docs &amp;amp;&amp;amp; npm install &amp;amp;&amp;amp; npm run dev&lt;/code&gt; to preview locally, or deploy it standalone with the &lt;code&gt;Dockerfile&lt;/code&gt; inside.&lt;/p&gt; 
&lt;p&gt;Troubleshooting FAQ: &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/QA.md&quot;&gt;Troubleshooting FAQ&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Detailed API documentation is available at: &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/api/README.md&quot;&gt;API Docs&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Product plans and upcoming features: &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/ROADMAP.md&quot;&gt;Roadmap&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;🧭 Developer Guide&lt;/h2&gt; 
&lt;h3&gt;⚡ Fast Development Mode (Recommended)&lt;/h3&gt; 
&lt;p&gt;If you need to frequently modify code, &lt;strong&gt;you don&#39;t need to rebuild Docker images every time&lt;/strong&gt;! Use fast development mode:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Start infrastructure
make dev-start

# Start backend (new terminal)
make dev-app

# Start frontend (new terminal)
make dev-frontend
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Development Advantages:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;✅ Frontend modifications auto hot-reload (no restart needed)&lt;/li&gt; 
 &lt;li&gt;✅ Backend modifications quick restart (5-10 seconds, supports Air hot-reload)&lt;/li&gt; 
 &lt;li&gt;✅ No need to rebuild Docker images&lt;/li&gt; 
 &lt;li&gt;✅ Support IDE breakpoint debugging&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Detailed Documentation:&lt;/strong&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97.md&quot;&gt;Development Environment Quick Start&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;🤝 Contributing&lt;/h2&gt; 
&lt;p&gt;Welcome to submit &lt;a href=&quot;https://github.com/Tencent/WeKnora/issues&quot;&gt;Issues&lt;/a&gt; or Pull Requests.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Process:&lt;/strong&gt; Fork → Create branch → Commit changes → Open PR&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Standards:&lt;/strong&gt; Format code with &lt;code&gt;gofmt&lt;/code&gt;, follow &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; (&lt;code&gt;feat:&lt;/code&gt; / &lt;code&gt;fix:&lt;/code&gt; / &lt;code&gt;docs:&lt;/code&gt; / &lt;code&gt;test:&lt;/code&gt; / &lt;code&gt;refactor:&lt;/code&gt;)&lt;/p&gt; 
&lt;h3&gt;Validation&lt;/h3&gt; 
&lt;p&gt;For a focused PR, validate the changed scope first:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git fetch origin main
git diff --check origin/main...HEAD
golangci-lint run --new-from-rev=origin/main ./...
go test ./path/to/changed/package -count=1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Run &lt;code&gt;gofmt&lt;/code&gt; on changed Go files before committing. For frontend changes, run the relevant tests from &lt;code&gt;frontend/&lt;/code&gt; and use &lt;code&gt;npm run type-check&lt;/code&gt; when the change affects TypeScript or Vue components.&lt;/p&gt; 
&lt;p&gt;The full maintainer gate remains:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;make fmt
make lint
make test
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;make fmt&lt;/code&gt; formats the entire Go repository, so run it only with a clean worktree and review the resulting diff. Some full-suite tests require local infrastructure or service configuration. If a full check fails for an unrelated baseline or environment reason, include the exact command and failure in the PR while still providing passing targeted tests for your change.&lt;/p&gt; 
&lt;h2&gt;🔒 Security Notice&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Starting from v0.1.3, WeKnora includes login authentication functionality to enhance system security. For production deployments, we strongly recommend:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Deploy WeKnora services in internal/private network environments rather than public internet&lt;/li&gt; 
 &lt;li&gt;Avoid exposing the service directly to public networks to prevent potential information leakage&lt;/li&gt; 
 &lt;li&gt;Configure proper firewall rules and access controls for your deployment environment&lt;/li&gt; 
 &lt;li&gt;Regularly update to the latest version for security patches and improvements&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;👥 Contributors&lt;/h2&gt; 
&lt;p&gt;Thanks to these excellent contributors:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/Tencent/WeKnora/graphs/contributors&quot;&gt;&lt;img src=&quot;https://contrib.rocks/image?repo=Tencent/WeKnora&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;This project is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/Tencent/WeKnora/main/LICENSE&quot;&gt;MIT License&lt;/a&gt;. You are free to use, modify, and distribute the code with proper attribution.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/617acbe6b6ddc6fef6a25b8455aa38927c0b32126f978f62b17550c035fc0229/Tencent/WeKnora" medium="image" />
      
    </item>
    
    <item>
      <title>vxcontrol/pentagi</title>
      <link>https://github.com/vxcontrol/pentagi</link>
      <description>&lt;p&gt;Fully autonomous AI Agents system capable of performing complex penetration testing tasks&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://pentagi.com&quot;&gt;https://pentagi.com&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;PentAGI&lt;/h1&gt; 
&lt;div align=&quot;center&quot; style=&quot;font-size: 1.5em; margin: 20px 0;&quot;&gt; 
 &lt;strong&gt;P&lt;/strong&gt;enetration testing 
 &lt;strong&gt;A&lt;/strong&gt;rtificial 
 &lt;strong&gt;G&lt;/strong&gt;eneral 
 &lt;strong&gt;I&lt;/strong&gt;ntelligence 
&lt;/div&gt; 
&lt;br /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;Join the Community!&lt;/strong&gt; Connect with security researchers, AI enthusiasts, and fellow ethical hackers. Get support, share insights, and stay updated with the latest PentAGI developments.&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://discord.gg/2xrMh7qX6m&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Discord-7289DA?logo=discord&amp;amp;logoColor=white&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt;⠀&lt;a href=&quot;https://t.me/+Ka9i6CNwe71hMWQy&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Telegram-2CA5E0?logo=telegram&amp;amp;logoColor=white&quot; alt=&quot;Telegram&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://trendshift.io/repositories/15161&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/15161&quot; alt=&quot;vxcontrol%2Fpentagi | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#overview&quot;&gt;Overview&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#features&quot;&gt;Features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#architecture&quot;&gt;Architecture&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#advanced-agent-supervision&quot;&gt;Agent Supervision&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#quick-start&quot;&gt;Quick Start&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#giving-agents-docker-without-giving-away-the-host&quot;&gt;Agent Docker Access&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#running-several-instances-tenant_id&quot;&gt;Running Several Instances&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#how-to-use-pentagi-after-login&quot;&gt;How to Use PentAGI After Login&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#api-access&quot;&gt;API Access&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#custom-llm-provider-configuration&quot;&gt;LLM Provider Configuration&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#ollama-provider-configuration&quot;&gt;Ollama&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#openai-provider-configuration&quot;&gt;OpenAI&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#anthropic-provider-configuration&quot;&gt;Anthropic&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#google-ai-gemini-provider-configuration&quot;&gt;Google AI (Gemini)&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#aws-bedrock-provider-configuration&quot;&gt;AWS Bedrock&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#deepseek-provider-configuration&quot;&gt;DeepSeek&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#glm-provider-configuration&quot;&gt;GLM&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#kimi-provider-configuration&quot;&gt;Kimi&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#qwen-provider-configuration&quot;&gt;Qwen&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#minimax-provider-configuration&quot;&gt;MiniMax&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#advanced-setup&quot;&gt;Advanced Setup&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#langfuse-integration&quot;&gt;Langfuse Integration&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#monitoring-and-observability&quot;&gt;Monitoring and Observability&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#knowledge-graph-integration-graphiti&quot;&gt;Knowledge Graph (Graphiti)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#github-and-google-oauth-integration&quot;&gt;OAuth Integration&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#docker-image-configuration&quot;&gt;Docker Image Configuration&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#development&quot;&gt;Development&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#testing-llm-agents&quot;&gt;Testing LLM Agents&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#embedding-configuration-and-testing&quot;&gt;Embedding Configuration and Testing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#function-testing-with-ftester&quot;&gt;Function Testing with ftester&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#building&quot;&gt;Building&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#credits&quot;&gt;Credits&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#license&quot;&gt;License&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;PentAGI is an innovative tool for automated security testing that leverages cutting-edge artificial intelligence technologies. The project is designed for information security professionals, researchers, and enthusiasts who need a powerful and flexible solution for conducting penetration tests.&lt;/p&gt; 
&lt;p&gt;You can watch the video &lt;strong&gt;PentAGI overview&lt;/strong&gt;: &lt;a href=&quot;https://youtu.be/R70x5Ddzs1o&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0828dc3e-15f1-4a1d-858e-9696a146e478&quot; alt=&quot;PentAGI Overview Video&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Secure &amp;amp; Isolated. All operations are performed in a sandboxed Docker environment with complete isolation.&lt;/li&gt; 
 &lt;li&gt;Fully Autonomous. AI-powered agent that automatically determines and executes penetration testing steps with optional execution monitoring and intelligent task planning for enhanced reliability.&lt;/li&gt; 
 &lt;li&gt;Professional Pentesting Tools. Built-in suite of 20+ professional security tools including nmap, metasploit, sqlmap, and more.&lt;/li&gt; 
 &lt;li&gt;Smart Memory System. Long-term storage of research results and successful approaches for future use.&lt;/li&gt; 
 &lt;li&gt;Optional Knowledge Graph Integration. Graphiti-powered knowledge graph using Neo4j for semantic relationship tracking and advanced context understanding.&lt;/li&gt; 
 &lt;li&gt;Web Intelligence. Built-in browser via &lt;a href=&quot;https://hub.docker.com/r/vxcontrol/scraper&quot;&gt;scraper&lt;/a&gt; for gathering latest information from web sources.&lt;/li&gt; 
 &lt;li&gt;External Search Systems. Integration with advanced search APIs including &lt;a href=&quot;https://tavily.com&quot;&gt;Tavily&lt;/a&gt;, &lt;a href=&quot;https://www.firecrawl.dev&quot;&gt;Firecrawl&lt;/a&gt;, &lt;a href=&quot;https://traversaal.ai&quot;&gt;Traversaal&lt;/a&gt;, &lt;a href=&quot;https://www.perplexity.ai&quot;&gt;Perplexity&lt;/a&gt;, &lt;a href=&quot;https://duckduckgo.com/&quot;&gt;DuckDuckGo&lt;/a&gt;, &lt;a href=&quot;https://programmablesearchengine.google.com/&quot;&gt;Google Custom Search&lt;/a&gt;, &lt;a href=&quot;https://sploitus.com&quot;&gt;Sploitus Search&lt;/a&gt; and &lt;a href=&quot;https://searxng.org&quot;&gt;Searxng&lt;/a&gt; for comprehensive information gathering.&lt;/li&gt; 
 &lt;li&gt;Team of Specialists. Delegation system with specialized AI agents for research, development, and infrastructure tasks, enhanced with optional execution monitoring and intelligent task planning for optimal performance with smaller models.&lt;/li&gt; 
 &lt;li&gt;Comprehensive Monitoring. Detailed logging and integration with Grafana/Prometheus for real-time system observation.&lt;/li&gt; 
 &lt;li&gt;Detailed Reporting. Generation of thorough vulnerability reports with exploitation guides.&lt;/li&gt; 
 &lt;li&gt;Smart Container Management. Automatic Docker image selection based on specific task requirements.&lt;/li&gt; 
 &lt;li&gt;Modern Interface. Clean and intuitive web UI for system management and monitoring.&lt;/li&gt; 
 &lt;li&gt;Comprehensive APIs. Full-featured REST and GraphQL APIs with Bearer token authentication for automation and integration.&lt;/li&gt; 
 &lt;li&gt;Persistent Storage. All commands and outputs are stored in PostgreSQL with &lt;a href=&quot;https://hub.docker.com/r/vxcontrol/pgvector&quot;&gt;pgvector&lt;/a&gt; extension.&lt;/li&gt; 
 &lt;li&gt;Scalable Architecture. Microservices-based design supporting horizontal scaling.&lt;/li&gt; 
 &lt;li&gt;Self-Hosted Solution. Complete control over your deployment and data.&lt;/li&gt; 
 &lt;li&gt;Flexible Authentication. Support for 10+ LLM providers (&lt;a href=&quot;https://platform.openai.com/&quot;&gt;OpenAI&lt;/a&gt;, &lt;a href=&quot;https://www.anthropic.com/&quot;&gt;Anthropic&lt;/a&gt;, &lt;a href=&quot;https://ai.google.dev/&quot;&gt;Google AI/Gemini&lt;/a&gt;, &lt;a href=&quot;https://aws.amazon.com/bedrock/&quot;&gt;AWS Bedrock&lt;/a&gt;, &lt;a href=&quot;https://ollama.com/&quot;&gt;Ollama&lt;/a&gt;, &lt;a href=&quot;https://www.deepseek.com/en/&quot;&gt;DeepSeek&lt;/a&gt;, &lt;a href=&quot;https://z.ai/&quot;&gt;GLM&lt;/a&gt;, &lt;a href=&quot;https://platform.moonshot.ai/&quot;&gt;Kimi&lt;/a&gt;, &lt;a href=&quot;https://www.alibabacloud.com/en/&quot;&gt;Qwen&lt;/a&gt;, &lt;a href=&quot;https://www.minimax.io/&quot;&gt;MiniMax&lt;/a&gt;, Custom) plus aggregators (&lt;a href=&quot;https://openrouter.ai/&quot;&gt;OpenRouter&lt;/a&gt;, &lt;a href=&quot;https://deepinfra.com/&quot;&gt;DeepInfra&lt;/a&gt;, &lt;a href=&quot;https://www.atlascloud.ai/&quot;&gt;Atlas Cloud&lt;/a&gt;, &lt;a href=&quot;https://opencode.ai/en/go&quot;&gt;OpenCode Go plan&lt;/a&gt;). For production local deployments, see our &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/guides/vllm-qwen35-27b-fp8.md&quot;&gt;vLLM + Qwen3.5-27B-FP8 guide&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;API Token Authentication. Secure Bearer token system for programmatic access to REST and GraphQL APIs.&lt;/li&gt; 
 &lt;li&gt;Quick Deployment. Easy setup through &lt;a href=&quot;https://docs.docker.com/compose/&quot;&gt;Docker Compose&lt;/a&gt; with comprehensive environment configuration.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Current Capability Boundaries&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;PentAGI today is an autonomous and assistant-guided penetration testing platform, not a CALDERA-style Breach and Attack Simulation (BAS) or adversary emulation product with predefined campaigns or attack plans.&lt;/li&gt; 
 &lt;li&gt;BAS-like agent-authored attack scripts should be treated as conceptual or future work, not as a feature that is implemented today.&lt;/li&gt; 
 &lt;li&gt;The current flow report UI supports web view, copy to clipboard, Markdown download, and PDF download. JSON flow-report export is not documented as a supported output format today.&lt;/li&gt; 
 &lt;li&gt;Provider flexibility is available today through built-in providers and custom/OpenAI-compatible endpoints. See &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#custom-llm-provider-configuration&quot;&gt;Custom LLM Provider Configuration&lt;/a&gt; and the &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/guides/vllm-qwen35-27b-fp8.md&quot;&gt;vLLM + Qwen3.5-27B-FP8 guide&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Architecture&lt;/h2&gt; 
&lt;h3&gt;System Context&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart TB
    classDef person fill:#08427B,stroke:#073B6F,color:#fff
    classDef system fill:#1168BD,stroke:#0B4884,color:#fff
    classDef external fill:#666666,stroke:#0B4884,color:#fff

    pentester[&quot;👤 Security Engineer
    (User of the system)&quot;]

    pentagi[&quot;✨ PentAGI
    (Autonomous penetration testing system)&quot;]

    target[&quot;🎯 target-system
    (System under test)&quot;]
    llm[&quot;🧠 llm-provider
    (OpenAI/Anthropic/Ollama/Bedrock/Gemini/Custom)&quot;]
    search[&quot;🔍 search-systems
    (Google/DuckDuckGo/Tavily/Firecrawl/Traversaal/Perplexity/Sploitus/Searxng)&quot;]
    langfuse[&quot;📊 langfuse-ui
    (LLM Observability Dashboard)&quot;]
    grafana[&quot;📈 grafana
    (System Monitoring Dashboard)&quot;]

    pentester --&amp;gt; |Uses HTTPS| pentagi
    pentester --&amp;gt; |Monitors AI HTTPS| langfuse
    pentester --&amp;gt; |Monitors System HTTPS| grafana
    pentagi --&amp;gt; |Tests Various protocols| target
    pentagi --&amp;gt; |Queries HTTPS| llm
    pentagi --&amp;gt; |Searches HTTPS| search
    pentagi --&amp;gt; |Reports HTTPS| langfuse
    pentagi --&amp;gt; |Reports HTTPS| grafana

    class pentester person
    class pentagi system
    class target,llm,search,langfuse,grafana external

    linkStyle default stroke:#ffffff,color:#ffffff
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Container Architecture&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TB
    subgraph Core Services
        UI[Frontend UI&amp;lt;br/&amp;gt;React + TypeScript]
        API[Backend API&amp;lt;br/&amp;gt;Go + GraphQL]
        DB[(Vector Store&amp;lt;br/&amp;gt;PostgreSQL + pgvector)]
        MQ[Task Queue&amp;lt;br/&amp;gt;Async Processing]
        Agent[AI Agents&amp;lt;br/&amp;gt;Multi-Agent System]
    end

    subgraph Knowledge Graph
        Graphiti[Graphiti&amp;lt;br/&amp;gt;Knowledge Graph API]
        Neo4j[(Neo4j&amp;lt;br/&amp;gt;Graph Database)]
    end

    subgraph Monitoring
        Grafana[Grafana&amp;lt;br/&amp;gt;Dashboards]
        VictoriaMetrics[VictoriaMetrics&amp;lt;br/&amp;gt;Time-series DB]
        Jaeger[Jaeger&amp;lt;br/&amp;gt;Distributed Tracing]
        Loki[Loki&amp;lt;br/&amp;gt;Log Aggregation]
        OTEL[OpenTelemetry&amp;lt;br/&amp;gt;Data Collection]
    end

    subgraph Analytics
        Langfuse[Langfuse&amp;lt;br/&amp;gt;LLM Analytics]
        ClickHouse[ClickHouse&amp;lt;br/&amp;gt;Analytics DB]
        Redis[Redis&amp;lt;br/&amp;gt;Cache + Rate Limiter]
        MinIO[MinIO&amp;lt;br/&amp;gt;S3 Storage]
    end

    subgraph Security Tools
        Scraper[Web Scraper&amp;lt;br/&amp;gt;Isolated Browser]
        PenTest[Security Tools&amp;lt;br/&amp;gt;20+ Pro Tools&amp;lt;br/&amp;gt;Sandboxed Execution]
    end

    UI --&amp;gt; |HTTP/WS| API
    API --&amp;gt; |SQL| DB
    API --&amp;gt; |Events| MQ
    MQ --&amp;gt; |Tasks| Agent
    Agent --&amp;gt; |Commands| PenTest
    Agent --&amp;gt; |Queries| DB
    Agent --&amp;gt; |Knowledge| Graphiti
    Graphiti --&amp;gt; |Graph| Neo4j

    API --&amp;gt; |Telemetry| OTEL
    OTEL --&amp;gt; |Metrics| VictoriaMetrics
    OTEL --&amp;gt; |Traces| Jaeger
    OTEL --&amp;gt; |Logs| Loki

    Grafana --&amp;gt; |Query| VictoriaMetrics
    Grafana --&amp;gt; |Query| Jaeger
    Grafana --&amp;gt; |Query| Loki

    API --&amp;gt; |Analytics| Langfuse
    Langfuse --&amp;gt; |Store| ClickHouse
    Langfuse --&amp;gt; |Cache| Redis
    Langfuse --&amp;gt; |Files| MinIO

    classDef core fill:#f9f,stroke:#333,stroke-width:2px,color:#000
    classDef knowledge fill:#ffa,stroke:#333,stroke-width:2px,color:#000
    classDef monitoring fill:#bbf,stroke:#333,stroke-width:2px,color:#000
    classDef analytics fill:#bfb,stroke:#333,stroke-width:2px,color:#000
    classDef tools fill:#fbb,stroke:#333,stroke-width:2px,color:#000

    class UI,API,DB,MQ,Agent core
    class Graphiti,Neo4j knowledge
    class Grafana,VictoriaMetrics,Jaeger,Loki,OTEL monitoring
    class Langfuse,ClickHouse,Redis,MinIO analytics
    class Scraper,PenTest tools
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Entity Relationship&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;erDiagram
    Flow ||--o{ Task : contains
    Task ||--o{ SubTask : contains
    SubTask ||--o{ Action : contains
    Action ||--o{ Artifact : produces
    Action ||--o{ Memory : stores

    Flow {
        string id PK
        string name &quot;Flow name&quot;
        string description &quot;Flow description&quot;
        string status &quot;active/completed/failed&quot;
        json parameters &quot;Flow parameters&quot;
        timestamp created_at
        timestamp updated_at
    }

    Task {
        string id PK
        string flow_id FK
        string name &quot;Task name&quot;
        string description &quot;Task description&quot;
        string status &quot;pending/running/done/failed&quot;
        json result &quot;Task results&quot;
        timestamp created_at
        timestamp updated_at
    }

    SubTask {
        string id PK
        string task_id FK
        string name &quot;Subtask name&quot;
        string description &quot;Subtask description&quot;
        string status &quot;queued/running/completed/failed&quot;
        string agent_type &quot;researcher/developer/executor&quot;
        json context &quot;Agent context&quot;
        timestamp created_at
        timestamp updated_at
    }

    Action {
        string id PK
        string subtask_id FK
        string type &quot;command/search/analyze/etc&quot;
        string status &quot;success/failure&quot;
        json parameters &quot;Action parameters&quot;
        json result &quot;Action results&quot;
        timestamp created_at
    }

    Artifact {
        string id PK
        string action_id FK
        string type &quot;file/report/log&quot;
        string path &quot;Storage path&quot;
        json metadata &quot;Additional info&quot;
        timestamp created_at
    }

    Memory {
        string id PK
        string action_id FK
        string type &quot;observation/conclusion&quot;
        vector embedding &quot;Vector representation&quot;
        text content &quot;Memory content&quot;
        timestamp created_at
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Agent Interaction&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;sequenceDiagram
    participant O as Orchestrator
    participant R as Researcher
    participant D as Developer
    participant E as Executor
    participant VS as Vector Store
    participant KB as Knowledge Base

    Note over O,KB: Flow Initialization
    O-&amp;gt;&amp;gt;VS: Query similar tasks
    VS--&amp;gt;&amp;gt;O: Return experiences
    O-&amp;gt;&amp;gt;KB: Load relevant knowledge
    KB--&amp;gt;&amp;gt;O: Return context

    Note over O,R: Research Phase
    O-&amp;gt;&amp;gt;R: Analyze target
    R-&amp;gt;&amp;gt;VS: Search similar cases
    VS--&amp;gt;&amp;gt;R: Return patterns
    R-&amp;gt;&amp;gt;KB: Query vulnerabilities
    KB--&amp;gt;&amp;gt;R: Return known issues
    R-&amp;gt;&amp;gt;VS: Store findings
    R--&amp;gt;&amp;gt;O: Research results

    Note over O,D: Planning Phase
    O-&amp;gt;&amp;gt;D: Plan attack
    D-&amp;gt;&amp;gt;VS: Query exploits
    VS--&amp;gt;&amp;gt;D: Return techniques
    D-&amp;gt;&amp;gt;KB: Load tools info
    KB--&amp;gt;&amp;gt;D: Return capabilities
    D--&amp;gt;&amp;gt;O: Attack plan

    Note over O,E: Execution Phase
    O-&amp;gt;&amp;gt;E: Execute plan
    E-&amp;gt;&amp;gt;KB: Load tool guides
    KB--&amp;gt;&amp;gt;E: Return procedures
    E-&amp;gt;&amp;gt;VS: Store results
    E--&amp;gt;&amp;gt;O: Execution status
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Memory System&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TB
    subgraph &quot;Long-term Memory&quot;
        VS[(Vector Store&amp;lt;br/&amp;gt;Embeddings DB)]
        KB[Knowledge Base&amp;lt;br/&amp;gt;Domain Expertise]
        Tools[Tools Knowledge&amp;lt;br/&amp;gt;Usage Patterns]
    end

    subgraph &quot;Working Memory&quot;
        Context[Current Context&amp;lt;br/&amp;gt;Task State]
        Goals[Active Goals&amp;lt;br/&amp;gt;Objectives]
        State[System State&amp;lt;br/&amp;gt;Resources]
    end

    subgraph &quot;Episodic Memory&quot;
        Actions[Past Actions&amp;lt;br/&amp;gt;Commands History]
        Results[Action Results&amp;lt;br/&amp;gt;Outcomes]
        Patterns[Success Patterns&amp;lt;br/&amp;gt;Best Practices]
    end

    Context --&amp;gt; |Query| VS
    VS --&amp;gt; |Retrieve| Context

    Goals --&amp;gt; |Consult| KB
    KB --&amp;gt; |Guide| Goals

    State --&amp;gt; |Record| Actions
    Actions --&amp;gt; |Learn| Patterns
    Patterns --&amp;gt; |Store| VS

    Tools --&amp;gt; |Inform| State
    Results --&amp;gt; |Update| Tools

    VS --&amp;gt; |Enhance| KB
    KB --&amp;gt; |Index| VS

    classDef ltm fill:#f9f,stroke:#333,stroke-width:2px,color:#000
    classDef wm fill:#bbf,stroke:#333,stroke-width:2px,color:#000
    classDef em fill:#bfb,stroke:#333,stroke-width:2px,color:#000

    class VS,KB,Tools ltm
    class Context,Goals,State wm
    class Actions,Results,Patterns em
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Chain Summarization&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;p&gt;The chain summarization system manages conversation context growth by selectively summarizing older messages. This is critical for preventing token limits from being exceeded while maintaining conversation coherence.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart TD
    A[Input Chain] --&amp;gt; B{Needs Summarization?}
    B --&amp;gt;|No| C[Return Original Chain]
    B --&amp;gt;|Yes| D[Convert to ChainAST]
    D --&amp;gt; E[Apply Section Summarization]
    E --&amp;gt; F[Process Oversized Pairs]
    F --&amp;gt; G[Manage Last Section Size]
    G --&amp;gt; H[Apply QA Summarization]
    H --&amp;gt; I[Rebuild Chain with Summaries]
    I --&amp;gt; J{Is New Chain Smaller?}
    J --&amp;gt;|Yes| K[Return Optimized Chain]
    J --&amp;gt;|No| C

    classDef process fill:#bbf,stroke:#333,stroke-width:2px,color:#000
    classDef decision fill:#bfb,stroke:#333,stroke-width:2px,color:#000
    classDef output fill:#fbb,stroke:#333,stroke-width:2px,color:#000

    class A,D,E,F,G,H,I process
    class B,J decision
    class C,K output
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;The algorithm operates on a structured representation of conversation chains (ChainAST) that preserves message types including tool calls and their responses. All summarization operations maintain critical conversation flow while reducing context size.&lt;/p&gt; 
 &lt;h3&gt;Global Summarizer Configuration Options&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Parameter&lt;/th&gt; 
    &lt;th&gt;Environment Variable&lt;/th&gt; 
    &lt;th&gt;Default&lt;/th&gt; 
    &lt;th&gt;Description&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Preserve Last&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;SUMMARIZER_PRESERVE_LAST&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Whether to keep all messages in the last section intact&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Use QA Pairs&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;SUMMARIZER_USE_QA&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Whether to use QA pair summarization strategy&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Summarize Human in QA&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;SUMMARIZER_SUM_MSG_HUMAN_IN_QA&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Whether to summarize human messages in QA pairs&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Last Section Size&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;SUMMARIZER_LAST_SEC_BYTES&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;51200&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum byte size for last section (50KB)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Max Body Pair Size&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;SUMMARIZER_MAX_BP_BYTES&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;16384&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum byte size for a single body pair (16KB)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Max QA Sections&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;SUMMARIZER_MAX_QA_SECTIONS&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum QA pair sections to preserve&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Max QA Size&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;SUMMARIZER_MAX_QA_BYTES&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;65536&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum byte size for QA pair sections (64KB)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Keep QA Sections&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;SUMMARIZER_KEEP_QA_SECTIONS&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Number of recent QA sections to keep without summarization&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;h3&gt;Assistant Summarizer Configuration Options&lt;/h3&gt; 
 &lt;p&gt;Assistant instances can use customized summarization settings to fine-tune context management behavior:&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Parameter&lt;/th&gt; 
    &lt;th&gt;Environment Variable&lt;/th&gt; 
    &lt;th&gt;Default&lt;/th&gt; 
    &lt;th&gt;Description&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Preserve Last&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;ASSISTANT_SUMMARIZER_PRESERVE_LAST&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Whether to preserve all messages in the assistant&#39;s last section&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Last Section Size&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;ASSISTANT_SUMMARIZER_LAST_SEC_BYTES&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;76800&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum byte size for assistant&#39;s last section (75KB)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Max Body Pair Size&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;ASSISTANT_SUMMARIZER_MAX_BP_BYTES&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;16384&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum byte size for a single body pair in assistant context (16KB)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Max QA Sections&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;ASSISTANT_SUMMARIZER_MAX_QA_SECTIONS&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum QA sections to preserve in assistant context&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Max QA Size&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;ASSISTANT_SUMMARIZER_MAX_QA_BYTES&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;76800&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum byte size for assistant&#39;s QA sections (75KB)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Keep QA Sections&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;ASSISTANT_SUMMARIZER_KEEP_QA_SECTIONS&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Number of recent QA sections to preserve without summarization&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;The assistant summarizer configuration provides more memory for context retention compared to the global settings, preserving more recent conversation history while still ensuring efficient token usage.&lt;/p&gt; 
 &lt;h3&gt;Summarizer Environment Configuration&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Default values for global summarizer logic
SUMMARIZER_PRESERVE_LAST=true
SUMMARIZER_USE_QA=true
SUMMARIZER_SUM_MSG_HUMAN_IN_QA=false
SUMMARIZER_LAST_SEC_BYTES=51200
SUMMARIZER_MAX_BP_BYTES=16384
SUMMARIZER_MAX_QA_SECTIONS=10
SUMMARIZER_MAX_QA_BYTES=65536
SUMMARIZER_KEEP_QA_SECTIONS=1

# Default values for assistant summarizer logic
ASSISTANT_SUMMARIZER_PRESERVE_LAST=true
ASSISTANT_SUMMARIZER_LAST_SEC_BYTES=76800
ASSISTANT_SUMMARIZER_MAX_BP_BYTES=16384
ASSISTANT_SUMMARIZER_MAX_QA_SECTIONS=7
ASSISTANT_SUMMARIZER_MAX_QA_BYTES=76800
ASSISTANT_SUMMARIZER_KEEP_QA_SECTIONS=3
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;p&gt;&lt;a id=&quot;advanced-agent-supervision&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Advanced Agent Supervision&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;p&gt;PentAGI includes sophisticated multi-layered agent supervision mechanisms to ensure efficient task execution, prevent infinite loops, and provide intelligent recovery from stuck states:&lt;/p&gt; 
 &lt;h3&gt;Execution Monitoring (Beta)&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Automatic Mentor Intervention&lt;/strong&gt;: Adviser agent (mentor) is automatically invoked when execution patterns indicate potential issues&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Pattern Detection&lt;/strong&gt;: Monitors identical tool calls (threshold: 5, configurable) and total tool calls (threshold: 10, configurable)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Progress Analysis&lt;/strong&gt;: Evaluates whether agent advances toward subtask objective, detects loops and inefficiencies&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Alternative Strategies&lt;/strong&gt;: Recommends different approaches when current strategy fails&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Information Retrieval Guidance&lt;/strong&gt;: Suggests searching for established solutions instead of reinventing&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Enhanced Response Format&lt;/strong&gt;: Tool responses include both &lt;code&gt;&amp;lt;original_result&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;mentor_analysis&amp;gt;&lt;/code&gt; sections&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Configurable&lt;/strong&gt;: Enable via &lt;code&gt;EXECUTION_MONITOR_ENABLED&lt;/code&gt; (default: false), customize thresholds with &lt;code&gt;EXECUTION_MONITOR_SAME_TOOL_LIMIT&lt;/code&gt; and &lt;code&gt;EXECUTION_MONITOR_TOTAL_TOOL_LIMIT&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Smaller models (&amp;lt; 32B parameters), complex attack scenarios requiring continuous guidance, preventing agents from getting stuck on single approach&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Performance Impact&lt;/strong&gt;: 2-3x increase in execution time and token usage, but delivers &lt;strong&gt;2x improvement in result quality&lt;/strong&gt; based on testing with Qwen3.5-27B-FP8&lt;/p&gt; 
 &lt;h3&gt;Intelligent Task Planning (Beta)&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Automated Decomposition&lt;/strong&gt;: Planner (adviser in planning mode) generates 3-7 specific, actionable steps before specialist agents begin work&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Context-Aware Plans&lt;/strong&gt;: Analyzes full execution context via enricher agent to create informed plans&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Structured Assignment&lt;/strong&gt;: Original request wrapped in &lt;code&gt;&amp;lt;task_assignment&amp;gt;&lt;/code&gt; structure with execution plan and instructions&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Scope Management&lt;/strong&gt;: Prevents scope creep by keeping agents focused on current subtask only&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Enriched Instructions&lt;/strong&gt;: Plans highlight critical actions, potential pitfalls, and verification points&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Configurable&lt;/strong&gt;: Enable via &lt;code&gt;AGENT_PLANNING_STEP_ENABLED&lt;/code&gt; (default: false)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Models &amp;lt; 32B parameters, complex penetration testing workflows, improving success rates on sophisticated tasks&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Enhanced Adviser Configuration&lt;/strong&gt;: Works exceptionally well when adviser agent uses stronger model or enhanced settings. Example: using same base model with maximum reasoning mode for adviser (see &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/configs/vllm-qwen3.5-27b-fp8.provider.yml&quot;&gt;&lt;code&gt;vllm-qwen3.5-27b-fp8.provider.yml&lt;/code&gt;&lt;/a&gt;) enables comprehensive task analysis and strategic planning from identical model architecture.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Performance Impact&lt;/strong&gt;: Adds planning overhead but significantly improves completion rates and reduces redundant work&lt;/p&gt; 
 &lt;h3&gt;Tool Call Limits (Always Active)&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Hard Limits&lt;/strong&gt;: Prevent runaway executions regardless of supervision mode status&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Differentiated by Agent Type&lt;/strong&gt;: 
   &lt;ul&gt; 
    &lt;li&gt;General agents (Assistant, Primary Agent, Pentester, Coder, Installer): &lt;code&gt;MAX_GENERAL_AGENT_TOOL_CALLS&lt;/code&gt; (default: 100)&lt;/li&gt; 
    &lt;li&gt;Limited agents (Searcher, Enricher, Memorist, Generator, Reporter, Adviser, Reflector, Planner): &lt;code&gt;MAX_LIMITED_AGENT_TOOL_CALLS&lt;/code&gt; (default: 20)&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Graceful Termination&lt;/strong&gt;: Reflector guides agents to proper completion when approaching limits&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Resource Protection&lt;/strong&gt;: Ensures system stability and prevents resource exhaustion&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Reflector Integration (Always Active)&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Automatic Correction&lt;/strong&gt;: Invoked when LLM fails to generate tool calls after 3 attempts&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Strategic Guidance&lt;/strong&gt;: Analyzes failures and guides agents toward proper tool usage or barrier tools (&lt;code&gt;done&lt;/code&gt;, &lt;code&gt;ask&lt;/code&gt;)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Recovery Mechanism&lt;/strong&gt;: Provides contextual guidance based on specific failure patterns&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Limit Enforcement&lt;/strong&gt;: Coordinates graceful termination when tool call limits are reached&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Recommendations for Open Source Models&lt;/h3&gt; 
 &lt;p&gt;&lt;strong&gt;Must-Have for Models &amp;lt; 32B Parameters&lt;/strong&gt;: Testing with Qwen3.5-27B-FP8 demonstrates that enabling both Execution Monitoring and Task Planning is &lt;strong&gt;essential&lt;/strong&gt; for smaller open source models:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Quality Improvement&lt;/strong&gt;: 2x better results compared to baseline execution without supervision&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Loop Prevention&lt;/strong&gt;: Significantly reduces infinite loops and redundant work&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Attack Diversity&lt;/strong&gt;: Encourages exploration of multiple attack vectors instead of fixating on single approach&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Air-Gapped Deployments&lt;/strong&gt;: Enables production-grade autonomous pentesting in closed network environments with local LLM inference&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Trade-offs&lt;/strong&gt;:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Token consumption: 2-3x increase due to mentor/planner invocations&lt;/li&gt; 
  &lt;li&gt;Execution time: 2-3x longer due to analysis and planning steps&lt;/li&gt; 
  &lt;li&gt;Result quality: 2x improvement in completeness, accuracy, and attack coverage&lt;/li&gt; 
  &lt;li&gt;Model requirements: Works best when adviser uses enhanced configuration (higher reasoning parameters, stronger model variant, or different model)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Configuration Strategy&lt;/strong&gt;: For optimal performance with smaller models, configure adviser agent with enhanced settings:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Use same model with maximum reasoning mode (example: &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/configs/vllm-qwen3.5-27b-fp8.provider.yml&quot;&gt;&lt;code&gt;vllm-qwen3.5-27b-fp8.provider.yml&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt; 
  &lt;li&gt;Or use stronger model for adviser while keeping base model for other agents&lt;/li&gt; 
  &lt;li&gt;Adjust monitoring thresholds based on task complexity and model capabilities&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;p&gt;The architecture of PentAGI is designed to be modular, scalable, and secure. Here are the key components:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Core Services&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Frontend UI: React-based web interface with TypeScript for type safety&lt;/li&gt; 
   &lt;li&gt;Backend API: Go-based REST and GraphQL APIs with Bearer token authentication for programmatic access&lt;/li&gt; 
   &lt;li&gt;Vector Store: PostgreSQL with pgvector for semantic search and memory storage&lt;/li&gt; 
   &lt;li&gt;Task Queue: Async task processing system for reliable operation&lt;/li&gt; 
   &lt;li&gt;AI Agent: Multi-agent system with specialized roles for efficient testing&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Optional Knowledge Graph&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Graphiti: Knowledge graph API for semantic relationship tracking and contextual understanding&lt;/li&gt; 
   &lt;li&gt;Neo4j: Graph database for storing and querying relationships between entities, actions, and outcomes&lt;/li&gt; 
   &lt;li&gt;When enabled, automatically captures agent responses and tool executions for a flow-scoped knowledge base&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Monitoring Stack&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;OpenTelemetry: Unified observability data collection and correlation&lt;/li&gt; 
   &lt;li&gt;Grafana: Real-time visualization and alerting dashboards&lt;/li&gt; 
   &lt;li&gt;VictoriaMetrics: High-performance time-series metrics storage&lt;/li&gt; 
   &lt;li&gt;Jaeger: End-to-end distributed tracing for debugging&lt;/li&gt; 
   &lt;li&gt;Loki: Scalable log aggregation and analysis&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Analytics Platform&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Langfuse: Advanced LLM observability and performance analytics&lt;/li&gt; 
   &lt;li&gt;ClickHouse: Column-oriented analytics data warehouse&lt;/li&gt; 
   &lt;li&gt;Redis: High-speed caching and rate limiting&lt;/li&gt; 
   &lt;li&gt;MinIO: S3-compatible object storage for artifacts&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Security Tools&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Web Scraper: Isolated browser environment for safe web interaction&lt;/li&gt; 
   &lt;li&gt;Pentesting Tools: Comprehensive suite of 20+ professional security tools&lt;/li&gt; 
   &lt;li&gt;Sandboxed Execution: All operations run in isolated containers&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Memory Systems&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Long-term Memory: Persistent storage of knowledge and experiences&lt;/li&gt; 
   &lt;li&gt;Working Memory: Active context and goals for current operations&lt;/li&gt; 
   &lt;li&gt;Episodic Memory: Historical actions and success patterns&lt;/li&gt; 
   &lt;li&gt;Knowledge Base: Structured domain expertise and tool capabilities&lt;/li&gt; 
   &lt;li&gt;Context Management: Intelligently manages growing LLM context windows using chain summarization&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The system uses Docker containers for isolation and easy deployment, with separate networks for core services, monitoring, and analytics to ensure proper security boundaries. Each component is designed to scale horizontally and can be configured for high availability in production environments.&lt;/p&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;p&gt;For a step-by-step walkthrough that connects installation, configuration, LLM and embedding provider testing, and your first login, see the &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/guides/installation_configuration.md&quot;&gt;Installing and Configuring PentAGI&lt;/a&gt; guide. The sections below remain the detailed reference for each step.&lt;/p&gt; 
&lt;h3&gt;System Requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Docker and Docker Compose (or Podman - see &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#running-pentagi-with-podman&quot;&gt;Podman configuration&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Minimum 2 vCPU&lt;/li&gt; 
 &lt;li&gt;Minimum 4GB RAM&lt;/li&gt; 
 &lt;li&gt;20GB free disk space&lt;/li&gt; 
 &lt;li&gt;Internet access for downloading images and updates&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Using Installer (Recommended)&lt;/h3&gt; 
&lt;p&gt;PentAGI provides an interactive installer with a terminal-based UI for streamlined configuration and deployment. The installer guides you through system checks, LLM provider setup, search engine configuration, and security hardening.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Supported Platforms:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt;: amd64 &lt;a href=&quot;https://pentagi.com/downloads/linux/amd64/installer-latest.zip&quot;&gt;download&lt;/a&gt; | arm64 &lt;a href=&quot;https://pentagi.com/downloads/linux/arm64/installer-latest.zip&quot;&gt;download&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;: amd64 &lt;a href=&quot;https://pentagi.com/downloads/windows/amd64/installer-latest.zip&quot;&gt;download&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt;: amd64 (Intel) &lt;a href=&quot;https://pentagi.com/downloads/darwin/amd64/installer-latest.zip&quot;&gt;download&lt;/a&gt; | arm64 (M-series) &lt;a href=&quot;https://pentagi.com/downloads/darwin/arm64/installer-latest.zip&quot;&gt;download&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;macOS security warning:&lt;/strong&gt; If macOS flags a downloaded installer, use only the official PentAGI links above, choose the archive that matches your CPU architecture, verify the source before continuing, and follow the &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/backend/docs/installer/installer-troubleshooting.md#macos-reports-the-installer-as-malware&quot;&gt;installer troubleshooting guide&lt;/a&gt; before allowing the app to run.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Quick Installation (Linux amd64):&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Create installation directory
mkdir -p pentagi &amp;amp;&amp;amp; cd pentagi

# Download installer
wget -O installer.zip https://pentagi.com/downloads/linux/amd64/installer-latest.zip

# Extract
unzip installer.zip

# Run interactive installer
./installer
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Prerequisites &amp;amp; Permissions:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The installer requires appropriate privileges to interact with the Docker API for proper operation. By default, it uses the Docker socket (&lt;code&gt;/var/run/docker.sock&lt;/code&gt;) which requires either:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Option 1 (Recommended for production):&lt;/strong&gt; Run the installer as root:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo ./installer
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Option 2 (Development environments):&lt;/strong&gt; Grant your user access to the Docker socket by adding them to the &lt;code&gt;docker&lt;/code&gt; group:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Add your user to the docker group
sudo usermod -aG docker $USER

# Log out and log back in, or activate the group immediately
newgrp docker

# Verify Docker access (should run without sudo)
docker ps
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;⚠️ &lt;strong&gt;Security Note:&lt;/strong&gt; Adding a user to the &lt;code&gt;docker&lt;/code&gt; group grants root-equivalent privileges. Only do this for trusted users in controlled environments. For production deployments, consider using rootless Docker mode or running the installer with sudo.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The installer will:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;System Checks&lt;/strong&gt;: Verify Docker, network connectivity, and system requirements&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Environment Setup&lt;/strong&gt;: Create and configure &lt;code&gt;.env&lt;/code&gt; file with optimal defaults&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Provider Configuration&lt;/strong&gt;: Set up LLM providers (OpenAI, Anthropic, Gemini, Bedrock, Ollama, DeepSeek, GLM, Kimi, Qwen, MiniMax, Custom)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Search Engines&lt;/strong&gt;: Configure DuckDuckGo, Google, Tavily, Firecrawl, Traversaal, Perplexity, Sploitus, Searxng, and the optional internal browser-analytics fallback engine&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Security Hardening&lt;/strong&gt;: Generate secure credentials and configure SSL certificates&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Deployment&lt;/strong&gt;: Start PentAGI with docker-compose&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Current Web Settings Coverage&lt;/h3&gt; 
&lt;p&gt;The PentAGI web console already manages several settings areas after the server is up and running:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Settings -&amp;gt; Providers&lt;/strong&gt;: Create, edit, delete, and test user-defined provider profiles for supported provider types. These profiles control per-agent model selection, runtime parameters, reasoning options, and pricing metadata.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Settings -&amp;gt; Prompts&lt;/strong&gt;: Manage system, human, and tool prompt templates.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Settings -&amp;gt; PentAGI API&lt;/strong&gt;: Create and manage PentAGI Bearer tokens for REST and GraphQL access.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Other UI-managed preferences&lt;/strong&gt;: Favorite flows are stored as user preferences, and theme selection is handled from the main sidebar/profile controls rather than the Settings pages.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Still Server-Managed&lt;/h3&gt; 
&lt;p&gt;The following configuration areas still need to be set on the server through environment variables, compose files, or mounted config files:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;LLM credentials and connection details&lt;/strong&gt;: API keys, endpoints, auth modes, and provider-specific connection settings for OpenAI, Anthropic, Bedrock, Ollama, custom providers, and similar backends; config-path settings apply only where supported, such as &lt;code&gt;OLLAMA_SERVER_CONFIG_PATH&lt;/code&gt; and &lt;code&gt;LLM_SERVER_CONFIG_PATH&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Search provider credentials and options&lt;/strong&gt;: Settings such as &lt;code&gt;DUCKDUCKGO_*&lt;/code&gt;, &lt;code&gt;GOOGLE_*&lt;/code&gt;, &lt;code&gt;TAVILY_API_KEY&lt;/code&gt;, &lt;code&gt;FIRECRAWL_API_*&lt;/code&gt;, &lt;code&gt;TRAVERSAAL_API_KEY&lt;/code&gt;, &lt;code&gt;PERPLEXITY_*&lt;/code&gt;, &lt;code&gt;SEARXNG_*&lt;/code&gt;, &lt;code&gt;SPLOITUS_ENABLED&lt;/code&gt;, and the optional &lt;code&gt;WEB_SEARCH_INTERNAL_*&lt;/code&gt; browser-analytics fallback settings.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Third-party integrations&lt;/strong&gt;: Langfuse, Graphiti, and similar external services remain server-side configuration.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MCP server management&lt;/strong&gt;: MCP settings pages are not currently exposed as a live web-console feature.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;For Production &amp;amp; Enhanced Security:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;For production deployments or security-sensitive environments, we &lt;strong&gt;strongly recommend&lt;/strong&gt; using a distributed two-node architecture where worker operations are isolated on a separate server. This prevents untrusted code execution and network access issues on your main system.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;See detailed guide&lt;/strong&gt;: &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/guides/worker_node.md&quot;&gt;Worker Node Setup&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;The two-node setup provides:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Isolated Execution&lt;/strong&gt;: Worker containers run on dedicated hardware&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Network Isolation&lt;/strong&gt;: Separate network boundaries for penetration testing&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Security Boundaries&lt;/strong&gt;: Docker-in-Docker with TLS authentication&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;OOB Attack Support&lt;/strong&gt;: Dedicated port ranges for out-of-band techniques&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Giving Agents Docker Without Giving Away the Host&lt;/h4&gt; 
&lt;p&gt;Many pentest workflows need &lt;code&gt;docker&lt;/code&gt; inside the agent&#39;s sandbox. There are two ways to provide it, and they differ sharply in risk.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Recommended — point sandboxes at a hardened dind daemon over TLS.&lt;/strong&gt; Set &lt;code&gt;DOCKER_INSIDE=true&lt;/code&gt;, leave &lt;code&gt;DOCKER_SOCKET&lt;/code&gt; empty, and configure the daemon the sandbox may talk to:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;DOCKER_INSIDE=true
DOCKER_SOCKET=                                          # mount no socket
DOCKER_INSIDE_HOST=tcp://10.0.0.5:3376                  # hardened dind endpoint
DOCKER_INSIDE_TLS_VERIFY=1
DOCKER_INSIDE_CERT_PATH=/etc/docker/dind/certs/client   # path on the worker node
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;PentAGI injects these into every worker container as &lt;code&gt;DOCKER_HOST&lt;/code&gt;, &lt;code&gt;DOCKER_TLS_VERIFY&lt;/code&gt; and &lt;code&gt;DOCKER_CERT_PATH&lt;/code&gt; (the &lt;code&gt;_INSIDE_&lt;/code&gt; segment is dropped) and bind-mounts the certificate directory read-only at the same path, so &lt;code&gt;docker&lt;/code&gt; works inside the sandbox with no further setup.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Not recommended — bind-mounting a Docker socket (&lt;code&gt;DOCKER_SOCKET&lt;/code&gt;).&lt;/strong&gt; This has two failure modes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Boot-order race&lt;/strong&gt;: a bind-mount source that does not exist yet is created by Docker as a &lt;em&gt;directory&lt;/em&gt;. After a worker-node reboot, a worker container can start before dind has recreated its socket — Docker then puts a directory where the socket belongs, and dind cannot start until it is removed by hand.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Blast radius&lt;/strong&gt;: the race is only reliably avoided when the mounted socket is the &lt;strong&gt;host&lt;/strong&gt; daemon&#39;s, since that one always exists first. But that grants an autonomous agent the host Docker API: it can start a privileged container, mount &lt;code&gt;/&lt;/code&gt;, and compromise the entire node — PentAGI included.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Use &lt;code&gt;DOCKER_SOCKET&lt;/code&gt; only on single-node development setups where the host daemon is already trusted.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;See&lt;/strong&gt;: &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/guides/worker_node.md&quot;&gt;Worker Node Setup&lt;/a&gt; for the full dind hardening and TLS configuration, and &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/backend/docs/docker.md#worker-docker-access&quot;&gt;Worker Docker Access&lt;/a&gt; for the exact resolution algorithm.&lt;/p&gt; 
&lt;h4&gt;Running Several Instances (&lt;code&gt;TENANT_ID&lt;/code&gt;)&lt;/h4&gt; 
&lt;p&gt;A single PentAGI installation needs none of this — leave &lt;code&gt;TENANT_ID&lt;/code&gt; empty (the default) and nothing changes.&lt;/p&gt; 
&lt;p&gt;Set it when several PentAGI installations share external resources: one PostgreSQL server, one worker node, one Neo4j/Graphiti, one Langfuse. The typical case is a management backend per server with a common worker node and database. Because every instance numbers its flows from &lt;code&gt;1&lt;/code&gt;, they would otherwise collide on container names, database rows, knowledge-graph namespaces and session cookies. &lt;code&gt;TENANT_ID&lt;/code&gt; namespaces all of it:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Area&lt;/th&gt; 
   &lt;th&gt;Effect when &lt;code&gt;TENANT_ID=acme&lt;/code&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;PostgreSQL&lt;/td&gt; 
   &lt;td&gt;The instance creates and works inside schema &lt;code&gt;acme&lt;/code&gt; instead of &lt;code&gt;public&lt;/code&gt;; extensions stay shared in &lt;code&gt;DATABASE_EXTENSIONS_SCHEMA&lt;/code&gt; (default &lt;code&gt;public&lt;/code&gt;, &lt;code&gt;extensions&lt;/code&gt; on Supabase)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Worker containers&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;acme-pentagi-terminal-&amp;lt;flow&amp;gt;&lt;/code&gt; instead of &lt;code&gt;pentagi-terminal-&amp;lt;flow&amp;gt;&lt;/code&gt;; volumes and hostnames follow, and both carry a &lt;code&gt;pentagi.tenant&lt;/code&gt; label&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Knowledge graph&lt;/td&gt; 
   &lt;td&gt;Graphiti/Neo4j group ids become &lt;code&gt;acme-flow-&amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Auth&lt;/td&gt; 
   &lt;td&gt;Cookie and API token keys are derived from &lt;code&gt;COOKIE_SIGNING_SALT&lt;/code&gt; &lt;strong&gt;plus&lt;/strong&gt; the tenant, and the session cookie is renamed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Telemetry&lt;/td&gt; 
   &lt;td&gt;Langfuse traces carry the tenant as their &lt;code&gt;environment&lt;/code&gt; and a &lt;code&gt;tenant:acme&lt;/code&gt; tag; OTel resources gain &lt;code&gt;tenant_id&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The value must match &lt;code&gt;^[a-z][a-z0-9_]{0,31}$&lt;/code&gt; — an invalid one aborts startup rather than being silently normalised.&lt;/p&gt; 
&lt;p&gt;Some things stay yours to set per instance, because they are host resources rather than names: &lt;code&gt;DATA_DIR&lt;/code&gt; (two instances sharing it &lt;strong&gt;will&lt;/strong&gt; overwrite each other&#39;s flow data), &lt;code&gt;DOCKER_PORTS_BASE&lt;/code&gt;, the published ports, and &lt;code&gt;INSTALLATION_ID&lt;/code&gt;. The effective values are printed at startup under &lt;code&gt;Instance identity&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The installer provisions one instance per server. Running several on one server is possible — for example behind a shared nginx — but the stock &lt;code&gt;docker-compose.yml&lt;/code&gt; uses fixed container and network names, so it has to be adapted to your own network layout first.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;See&lt;/strong&gt;: &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/backend/docs/config.md#multi-instance-deployment-tenant_id&quot;&gt;Multi-Instance Deployment&lt;/a&gt; for validation rules, upgrade notes and the full list of operator responsibilities.&lt;/p&gt; 
&lt;h3&gt;Manual Installation&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create a working directory or clone the repository:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir pentagi &amp;amp;&amp;amp; cd pentagi
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;Copy &lt;code&gt;.env.example&lt;/code&gt; to &lt;code&gt;.env&lt;/code&gt; or download it:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -o .env https://raw.githubusercontent.com/vxcontrol/pentagi/master/.env.example
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;Touch examples files (&lt;code&gt;example.custom.provider.yml&lt;/code&gt;, &lt;code&gt;example.ollama.provider.yml&lt;/code&gt;) or download it:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -o example.custom.provider.yml https://raw.githubusercontent.com/vxcontrol/pentagi/master/examples/configs/custom-openai.provider.yml
curl -o example.ollama.provider.yml https://raw.githubusercontent.com/vxcontrol/pentagi/master/examples/configs/ollama-llama318b.provider.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;Fill in the required API keys in &lt;code&gt;.env&lt;/code&gt; file.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Required: At least one of these LLM providers
OPEN_AI_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
GEMINI_API_KEY=your_gemini_key

# Optional: AWS Bedrock provider (enterprise-grade models)
BEDROCK_REGION=us-east-1
# Choose one authentication method:
BEDROCK_DEFAULT_AUTH=true                        # Option 1: Use AWS SDK default credential chain (recommended for EC2/ECS)
# BEDROCK_BEARER_TOKEN=your_bearer_token         # Option 2: Bearer token authentication
# BEDROCK_ACCESS_KEY_ID=your_aws_access_key      # Option 3: Static credentials
# BEDROCK_SECRET_ACCESS_KEY=your_aws_secret_key

# Optional: Ollama provider (local or cloud)
# OLLAMA_SERVER_URL=http://ollama-server:11434   # Local server
# OLLAMA_SERVER_URL=https://ollama.com           # Cloud service
# OLLAMA_SERVER_API_KEY=your_ollama_cloud_key    # Required for cloud, empty for local

# Optional: Chinese AI providers
# DEEPSEEK_API_KEY=your_deepseek_key             # DeepSeek (strong reasoning)
# GLM_API_KEY=your_glm_key                       # GLM (Zhipu AI)
# KIMI_API_KEY=your_kimi_key                     # Kimi (Moonshot AI, ultra-long context)
# QWEN_API_KEY=your_qwen_key                     # Qwen (Alibaba Cloud, multimodal)
# MINIMAX_API_KEY=your_minimax_key               # MiniMax

# Optional: Local LLM provider (zero-cost inference)
OLLAMA_SERVER_URL=http://localhost:11434
OLLAMA_SERVER_MODEL=your_model_name

# Optional: Additional search capabilities
DUCKDUCKGO_ENABLED=true
DUCKDUCKGO_REGION=us-en
DUCKDUCKGO_SAFESEARCH=
DUCKDUCKGO_TIME_RANGE=
SPLOITUS_ENABLED=true
GOOGLE_API_KEY=your_google_key
GOOGLE_CX_KEY=your_google_cx
TAVILY_API_KEY=your_tavily_key
FIRECRAWL_API_KEY=your_firecrawl_key
FIRECRAWL_API_URL=
TRAVERSAAL_API_KEY=your_traversaal_key
PERPLEXITY_API_KEY=your_perplexity_key
PERPLEXITY_MODEL=sonar-pro
PERPLEXITY_CONTEXT_SIZE=medium

# Searxng meta search engine (aggregates results from multiple sources)
SEARXNG_URL=http://your-searxng-instance:8080
SEARXNG_CATEGORIES=general
SEARXNG_LANGUAGE=
SEARXNG_SAFESEARCH=0
SEARXNG_TIME_RANGE=
SEARXNG_TIMEOUT=

# Optional: internal browser-analytics fallback engine for web_search (off by default;
# scrapes and summarizes pages instead of calling a paid analytic API)
WEB_SEARCH_INTERNAL_ENABLED=false
WEB_SEARCH_INTERNAL_MAX_SITES=5
WEB_SEARCH_INTERNAL_MAX_SITE_BYTES=10240

## Graphiti knowledge graph settings
GRAPHITI_ENABLED=false
GRAPHITI_TIMEOUT=30
GRAPHITI_URL=

# Neo4j settings (used by Graphiti stack)
NEO4J_USER=neo4j
NEO4J_DATABASE=neo4j
NEO4J_PASSWORD=devpassword
NEO4J_URI=bolt://neo4j:7687

# Assistant configuration
ASSISTANT_USE_AGENTS=false         # Default value for agent usage when creating new assistants
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;5&quot;&gt; 
 &lt;li&gt;Change all security related environment variables in &lt;code&gt;.env&lt;/code&gt; file to improve security.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;details&gt; 
 &lt;summary&gt;Security related environment variables&lt;/summary&gt; 
 &lt;h3&gt;Main Security Settings&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;COOKIE_SIGNING_SALT&lt;/code&gt; - Salt for cookie signing, change to random value&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;PUBLIC_URL&lt;/code&gt; - Public URL of your server (eg. &lt;code&gt;https://pentagi.example.com&lt;/code&gt;)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;SERVER_SSL_CRT&lt;/code&gt; and &lt;code&gt;SERVER_SSL_KEY&lt;/code&gt; - Custom paths to your existing SSL certificate and key for HTTPS (these paths should be used in the docker-compose.yml file to mount as volumes)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;TENANT_ID&lt;/code&gt; - Leave empty unless this instance shares external resources with another PentAGI installation. When set, it is mixed into the cookie and API token signing keys and renames the session cookie, so a session minted by one instance is rejected by the others even though they share the same &lt;code&gt;COOKIE_SIGNING_SALT&lt;/code&gt;. See &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#running-several-instances-tenant_id&quot;&gt;Running Several Instances&lt;/a&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Scraper Access&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;SCRAPER_PUBLIC_URL&lt;/code&gt; - Public URL for scraper if you want to use different scraper server for public URLs&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;SCRAPER_PRIVATE_URL&lt;/code&gt; - Private URL for scraper (local scraper server in docker-compose.yml file to access it to local URLs)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Access Credentials&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;PENTAGI_POSTGRES_USER&lt;/code&gt; and &lt;code&gt;PENTAGI_POSTGRES_PASSWORD&lt;/code&gt; - PostgreSQL credentials&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;NEO4J_USER&lt;/code&gt; and &lt;code&gt;NEO4J_PASSWORD&lt;/code&gt; - Neo4j credentials (for Graphiti knowledge graph)&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;ol start=&quot;6&quot;&gt; 
 &lt;li&gt;Remove all inline comments from &lt;code&gt;.env&lt;/code&gt; file if you want to use it in VSCode or other IDEs as a envFile option:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;perl -i -pe &#39;s/\s+#.*$//&#39; .env
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;7&quot;&gt; 
 &lt;li&gt;Run the PentAGI stack:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose.yml
docker compose up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Visit &lt;a href=&quot;https://localhost:8443&quot;&gt;localhost:8443&lt;/a&gt; to access PentAGI Web UI (default is &lt;code&gt;admin@pentagi.com&lt;/code&gt; / &lt;code&gt;admin&lt;/code&gt;)&lt;/p&gt; 
&lt;h4&gt;Web UI Accounts&lt;/h4&gt; 
&lt;p&gt;PentAGI does not expose public self-service sign-up from the login page. A fresh installation creates the default local administrator account:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Email&lt;/strong&gt;: &lt;code&gt;admin@pentagi.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Password&lt;/strong&gt;: &lt;code&gt;admin&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;On first login, change the default password before using the instance for real work. If the administrator password is lost later, use the installer maintenance menu to reset the default &lt;code&gt;admin@pentagi.com&lt;/code&gt; account password.&lt;/p&gt; 
&lt;p&gt;For multi-user setups, an authenticated administrator can manage local users through the Users REST API (&lt;code&gt;/api/v1/users/&lt;/code&gt;). The OpenAPI UI is available at &lt;code&gt;https://localhost:8443/api/v1/swagger/index.html&lt;/code&gt; after the instance is running.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;If you caught an error about &lt;code&gt;pentagi-network&lt;/code&gt; or &lt;code&gt;observability-network&lt;/code&gt; or &lt;code&gt;langfuse-network&lt;/code&gt; you need to run &lt;code&gt;docker-compose.yml&lt;/code&gt; firstly to create these networks and after that run &lt;code&gt;docker-compose-langfuse.yml&lt;/code&gt;, &lt;code&gt;docker-compose-graphiti.yml&lt;/code&gt;, and &lt;code&gt;docker-compose-observability.yml&lt;/code&gt; to use Langfuse, Graphiti, and Observability services.&lt;/p&gt; 
 &lt;p&gt;You have to set at least one Language Model provider (OpenAI, Anthropic, Gemini, AWS Bedrock, or Ollama) to use PentAGI. AWS Bedrock provides enterprise-grade access to multiple foundation models from leading AI companies, while Ollama provides zero-cost local inference if you have sufficient computational resources. Additional API keys for search engines are optional but recommended for better results.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;For fully local deployment with advanced models&lt;/strong&gt;: See our comprehensive guide on &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/guides/vllm-qwen35-27b-fp8.md&quot;&gt;Running PentAGI with vLLM and Qwen3.5-27B-FP8&lt;/a&gt; for a production-grade local LLM setup. This configuration achieves ~13,000 TPS for prompt processing and ~650 TPS for completion on 4× RTX 5090 GPUs, supporting 12+ concurrent flows with complete independence from cloud providers.&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;LLM_SERVER_*&lt;/code&gt; environment variables are experimental feature and will be changed in the future. Right now you can use them to specify custom LLM server URL and one model for all agent types.&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;PROXY_URL&lt;/code&gt; is a global proxy URL for all LLM providers and external search systems. You can use it for isolation from external networks.&lt;/p&gt; 
 &lt;p&gt;The &lt;code&gt;docker-compose.yml&lt;/code&gt; file runs the PentAGI service as root user because it needs access to docker.sock for container management. If you&#39;re using TCP/IP network connection to Docker instead of socket file, you can remove root privileges and use the default &lt;code&gt;pentagi&lt;/code&gt; user for better security.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Accessing PentAGI from External Networks&lt;/h3&gt; 
&lt;p&gt;By default, PentAGI binds to &lt;code&gt;127.0.0.1&lt;/code&gt; (localhost only) for security. To access PentAGI from other machines on your network, you need to configure external access.&lt;/p&gt; 
&lt;h4&gt;Configuration Steps&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Update &lt;code&gt;.env&lt;/code&gt; file&lt;/strong&gt; with your server&#39;s IP address:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Network binding - allow external connections
PENTAGI_LISTEN_IP=0.0.0.0
PENTAGI_LISTEN_PORT=8443

# Public URL - use your actual server IP or hostname
# Replace 192.168.1.100 with your server&#39;s IP address
PUBLIC_URL=https://192.168.1.100:8443

# CORS origins - list all URLs that will access PentAGI
# Include localhost for local access AND your server IP for external access
CORS_ORIGINS=https://localhost:8443,https://192.168.1.100:8443
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Replace &lt;code&gt;192.168.1.100&lt;/code&gt; with your actual server&#39;s IP address&lt;/li&gt; 
  &lt;li&gt;Do NOT use &lt;code&gt;0.0.0.0&lt;/code&gt; in &lt;code&gt;PUBLIC_URL&lt;/code&gt; or &lt;code&gt;CORS_ORIGINS&lt;/code&gt; - use the actual IP address&lt;/li&gt; 
  &lt;li&gt;Include both localhost and your server IP in &lt;code&gt;CORS_ORIGINS&lt;/code&gt; for flexibility&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;strong&gt;Recreate containers&lt;/strong&gt; to apply the changes:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose down
docker compose up -d --force-recreate
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;strong&gt;Verify port binding:&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker ps | grep pentagi
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You should see &lt;code&gt;0.0.0.0:8443-&amp;gt;8443/tcp&lt;/code&gt; or &lt;code&gt;:::8443-&amp;gt;8443/tcp&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;If you see &lt;code&gt;127.0.0.1:8443-&amp;gt;8443/tcp&lt;/code&gt;, the environment variable wasn&#39;t picked up. In this case, directly edit &lt;code&gt;docker-compose.yml&lt;/code&gt; line 31:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;ports:
  - &quot;0.0.0.0:8443:8443&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then recreate containers again.&lt;/p&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;&lt;strong&gt;Configure firewall&lt;/strong&gt; to allow incoming connections on port 8443:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Ubuntu/Debian with UFW
sudo ufw allow 8443/tcp
sudo ufw reload

# CentOS/RHEL with firewalld
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --reload
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;5&quot;&gt; 
 &lt;li&gt;&lt;strong&gt;Access PentAGI:&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Local access:&lt;/strong&gt; &lt;code&gt;https://localhost:8443&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Network access:&lt;/strong&gt; &lt;code&gt;https://your-server-ip:8443&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;You&#39;ll need to accept the self-signed SSL certificate warning in your browser when accessing via IP address.&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Running PentAGI with Podman&lt;/h3&gt; 
&lt;p&gt;PentAGI fully supports Podman as a Docker alternative. However, when using &lt;strong&gt;Podman in rootless mode&lt;/strong&gt;, the scraper service requires special configuration because rootless containers cannot bind privileged ports (ports below 1024).&lt;/p&gt; 
&lt;h4&gt;Podman Rootless Configuration&lt;/h4&gt; 
&lt;p&gt;The default scraper configuration uses port 443 (HTTPS), which is a privileged port. For Podman rootless, reconfigure the scraper to use a non-privileged port:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;1. Edit &lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;/strong&gt; - modify the &lt;code&gt;scraper&lt;/code&gt; service (around line 199):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;scraper:
  image: vxcontrol/scraper:latest
  restart: unless-stopped
  container_name: scraper
  hostname: scraper
  expose:
    - 3000/tcp  # Changed from 443 to 3000
  ports:
    - &quot;${SCRAPER_LISTEN_IP:-127.0.0.1}:${SCRAPER_LISTEN_PORT:-9443}:3000&quot;  # Map to port 3000
  environment:
    - MAX_CONCURRENT_SESSIONS=${LOCAL_SCRAPER_MAX_CONCURRENT_SESSIONS:-10}
    - USERNAME=${LOCAL_SCRAPER_USERNAME:-someuser}
    - PASSWORD=${LOCAL_SCRAPER_PASSWORD:-somepass}
  logging:
    options:
      max-size: 50m
      max-file: &quot;7&quot;
  volumes:
    - scraper-ssl:/usr/src/app/ssl
  networks:
    - pentagi-network
  shm_size: 2g
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;2. Update &lt;code&gt;.env&lt;/code&gt; file&lt;/strong&gt; - change the scraper URL to use HTTP and port 3000:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Scraper configuration for Podman rootless
SCRAPER_PRIVATE_URL=http://someuser:somepass@scraper:3000/
LOCAL_SCRAPER_USERNAME=someuser
LOCAL_SCRAPER_PASSWORD=somepass
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;Key changes for Podman:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Use &lt;strong&gt;HTTP&lt;/strong&gt; instead of HTTPS for &lt;code&gt;SCRAPER_PRIVATE_URL&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;Use port &lt;strong&gt;3000&lt;/strong&gt; instead of 443&lt;/li&gt; 
  &lt;li&gt;Change internal &lt;code&gt;expose&lt;/code&gt; to &lt;code&gt;3000/tcp&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;Update port mapping to target &lt;code&gt;3000&lt;/code&gt; instead of &lt;code&gt;443&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;3. Recreate containers:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;podman-compose down
podman-compose up -d --force-recreate
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;4. Test scraper connectivity:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Test from within the pentagi container
podman exec -it pentagi wget -O- &quot;http://someuser:somepass@scraper:3000/html?url=http://example.com&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you see HTML output, the scraper is working correctly.&lt;/p&gt; 
&lt;h4&gt;Podman Rootful Mode&lt;/h4&gt; 
&lt;p&gt;If you&#39;re running Podman in rootful mode (with sudo), you can use the default configuration without modifications. The scraper will work on port 443 as intended.&lt;/p&gt; 
&lt;h4&gt;Docker Compatibility&lt;/h4&gt; 
&lt;p&gt;All Podman configurations remain fully compatible with Docker. The non-privileged port approach works identically on both container runtimes.&lt;/p&gt; 
&lt;h3&gt;Assistant Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI allows you to configure default behavior for assistants:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ASSISTANT_USE_AGENTS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Controls the default value for agent usage when creating new assistants&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The &lt;code&gt;ASSISTANT_USE_AGENTS&lt;/code&gt; setting affects the initial state of the &quot;Use Agents&quot; toggle when creating a new assistant in the UI:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;false&lt;/code&gt; (default): New assistants are created with agent delegation disabled by default&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;true&lt;/code&gt;: New assistants are created with agent delegation enabled by default&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Note that users can always override this setting by toggling the &quot;Use Agents&quot; button in the UI when creating or editing an assistant. This environment variable only controls the initial default state.&lt;/p&gt; 
&lt;h2&gt;How to Use PentAGI After Login&lt;/h2&gt; 
&lt;p&gt;Once the stack is running and you can sign in to the web UI, the fastest way to start is through the Flows workflow.&lt;/p&gt; 
&lt;h3&gt;1. Create your first flow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open &lt;strong&gt;Flows&lt;/strong&gt; in the sidebar.&lt;/li&gt; 
 &lt;li&gt;Click &lt;strong&gt;New Flow&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Choose the mode that fits your goal: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Automation&lt;/strong&gt;: fully autonomous execution for a testing goal you want PentAGI to carry out end-to-end&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Assistant&lt;/strong&gt;: interactive back-and-forth help when you want to steer the investigation step by step. In this mode you can also enable the &lt;strong&gt;Use Agents&lt;/strong&gt; toggle to let PentAGI delegate subtasks to specialized sub-agents for more complex investigations.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Select the LLM provider you want to use for this flow.&lt;/li&gt; 
 &lt;li&gt;Describe the target and the objective in natural language in the message box.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Good first prompts usually include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;the target system or URL&lt;/li&gt; 
 &lt;li&gt;the type of assessment you want&lt;/li&gt; 
 &lt;li&gt;any scope limitations or rules of engagement&lt;/li&gt; 
 &lt;li&gt;the result you expect, such as a vulnerability report or validation of a hypothesis&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Assess https://target.example for common web application vulnerabilities. Focus on authentication, file handling, and injection issues. Stay within the provided target only and summarize confirmed findings with reproduction steps.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Only test systems you own or are explicitly authorized to assess. See &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/EULA.md&quot;&gt;EULA.md&lt;/a&gt; for the acceptable use requirements.&lt;/p&gt; 
&lt;h3&gt;2. Use templates for repeatable workflows&lt;/h3&gt; 
&lt;p&gt;The new flow form includes a template picker, which can prefill the message box with a saved flow template. This is useful when you run similar assessments repeatedly.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Use an existing template if you already have one saved in &lt;strong&gt;Templates&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Start from the example prompt in &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/prompts/base_web_pentest.md&quot;&gt;&lt;code&gt;examples/prompts/base_web_pentest.md&lt;/code&gt;&lt;/a&gt; if you need a practical baseline for web testing&lt;/li&gt; 
 &lt;li&gt;Adjust the target, scope, and constraints before starting the flow&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Templates are starting points. You do not need special syntax to use PentAGI: plain natural-language instructions work well as long as the target and goal are clear.&lt;/p&gt; 
&lt;h3&gt;3. Monitor execution and review output&lt;/h3&gt; 
&lt;p&gt;After submitting the flow, PentAGI opens the flow page automatically.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Use the main flow view to follow messages, agent activity, and task progress&lt;/li&gt; 
 &lt;li&gt;Inspect tool activity and terminal output as the flow runs&lt;/li&gt; 
 &lt;li&gt;Review generated tasks and subtasks to understand what PentAGI is doing&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Once the flow has enough results, use the &lt;strong&gt;Report&lt;/strong&gt; menu on the flow page to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;open the report in a web view&lt;/li&gt; 
 &lt;li&gt;copy the generated report to the clipboard&lt;/li&gt; 
 &lt;li&gt;download the report as Markdown&lt;/li&gt; 
 &lt;li&gt;download the report as PDF&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;4. Use the Assistant view to steer an active flow&lt;/h3&gt; 
&lt;p&gt;Each flow also includes an &lt;strong&gt;Assistant&lt;/strong&gt; view for interactive guidance. This is useful when the autonomous run uncovers something that needs human direction instead of a hard restart.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Open the &lt;strong&gt;Assistant&lt;/strong&gt; view for the same flow when you want to inspect the current state before changing anything.&lt;/li&gt; 
 &lt;li&gt;Use the assistant to check flow status, stop the current task, submit follow-up instructions, or patch the remaining planned subtasks before the next step runs.&lt;/li&gt; 
 &lt;li&gt;Treat this as an explicit control path for the current flow, not as an invisible background queue. If you want to change direction, say so clearly and keep the new instruction tied to the current engagement scope.&lt;/li&gt; 
 &lt;li&gt;This works best for clarifying scope, redirecting priorities after intermediate findings, or answering an automation checkpoint without losing the rest of the flow context.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;5. Manage flow-scoped files&lt;/h3&gt; 
&lt;p&gt;Each flow has its own &lt;strong&gt;Files&lt;/strong&gt; tab in the flow page. Files are scoped to the parent flow: they live in &lt;code&gt;{dataDir}/flow-{id}-data/&lt;/code&gt; on the host and never leak into other flows.&lt;/p&gt; 
&lt;p&gt;The tab exposes three sources of files:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Uploads&lt;/strong&gt; (&lt;code&gt;uploads/&lt;/code&gt;): files you provide from the web UI. Use the &lt;strong&gt;Upload files&lt;/strong&gt; action, or drag and drop directly onto the Files tab. While the agent container is running, uploaded files are also pushed into it at &lt;code&gt;/work/uploads/&lt;/code&gt; so the agent can read them with normal shell tools.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Resources&lt;/strong&gt; (&lt;code&gt;resources/&lt;/code&gt;): files attached from your saved user resources library via &lt;strong&gt;Attach resources from library&lt;/strong&gt;. Attached resources are copied into the flow and pushed into the running container at &lt;code&gt;/work/resources/&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Container&lt;/strong&gt; (&lt;code&gt;container/&lt;/code&gt;): snapshots pulled from the running agent container via &lt;strong&gt;Pull file or directory from container&lt;/strong&gt;. These are read-only on the flow side and are never sent back to the container.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Per-file actions in the Files tab include &lt;strong&gt;Download&lt;/strong&gt;, &lt;strong&gt;Copy path&lt;/strong&gt;, &lt;strong&gt;Save as resource&lt;/strong&gt; (promote a flow file into your reusable resources library), and &lt;strong&gt;Delete&lt;/strong&gt;. The Pull action is disabled when the container is not running, with the tooltip &quot;Container is not running&quot;.&lt;/p&gt; 
&lt;p&gt;Uploaded files and attached resources are listed automatically in the agent&#39;s system prompts via the &lt;code&gt;{{.UserFiles}}&lt;/code&gt; template variable, which renders a compact &lt;code&gt;&amp;lt;task_files&amp;gt;&lt;/code&gt; XML block (with nested &lt;code&gt;&amp;lt;uploads&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;resources&amp;gt;&lt;/code&gt; sections), so the assistant and automation agents can reference them by path without you pasting the contents into chat. Container snapshots are visible in the UI only and are not auto-injected back into the prompt.&lt;/p&gt; 
&lt;p&gt;Current limits and limitations to be aware of:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Maximum upload file size is 300 MB; per upload request up to 1000 files and 2 GB total. File names are capped at 255 bytes (roughly 255 ASCII characters; non-ASCII names use multiple bytes per character).&lt;/li&gt; 
 &lt;li&gt;Uploads and resources are mirrored into the running container at the fixed paths &lt;code&gt;/work/uploads/&lt;/code&gt; and &lt;code&gt;/work/resources/&lt;/code&gt;; files written to other container paths are not auto-mirrored back into the flow file model. Container snapshots can originate from any container path you pull (for example &lt;code&gt;/etc/...&lt;/code&gt;) and are cached on the flow side under &lt;code&gt;container/&lt;/code&gt;; they are not pushed back into the container.&lt;/li&gt; 
 &lt;li&gt;Container snapshots are point-in-time pulls. Editing a snapshot in the UI does not write back into the running container.&lt;/li&gt; 
 &lt;li&gt;Deleting a flow today removes the flow record and its long-term memory entries, but does not yet archive or remove the flow&#39;s &lt;code&gt;flow-{id}-data/&lt;/code&gt; directory on disk. Operators are still expected to clean up the data directory manually if they want to reclaim the space.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For early testing, start with a narrow target and a single clear objective. This makes the output easier to review and helps you refine your prompts before running larger assessments.&lt;/p&gt; 
&lt;h2&gt;API Access&lt;/h2&gt; 
&lt;p&gt;PentAGI provides comprehensive programmatic access through both REST and GraphQL APIs, allowing you to integrate penetration testing workflows into your automation pipelines, CI/CD processes, and custom applications.&lt;/p&gt; 
&lt;h3&gt;Generating API Tokens&lt;/h3&gt; 
&lt;p&gt;API tokens are managed through the PentAGI web interface:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;API Tokens&lt;/strong&gt; in the web UI&lt;/li&gt; 
 &lt;li&gt;Click &lt;strong&gt;Create Token&lt;/strong&gt; to generate a new API token&lt;/li&gt; 
 &lt;li&gt;Configure token properties: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt; (optional): A descriptive name for the token&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Expiration Date&lt;/strong&gt;: When the token will expire (minimum 1 minute, maximum 3 years)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt; and &lt;strong&gt;copy the token immediately&lt;/strong&gt; - it will only be shown once for security reasons&lt;/li&gt; 
 &lt;li&gt;Use the token as a Bearer token in your API requests&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Each token is associated with your user account and inherits your role&#39;s permissions.&lt;/p&gt; 
&lt;h3&gt;Using API Tokens&lt;/h3&gt; 
&lt;p&gt;Include the API token in the &lt;code&gt;Authorization&lt;/code&gt; header of your HTTP requests:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# GraphQL API example
curl -X POST https://your-pentagi-instance:8443/api/v1/graphql \
  -H &quot;Authorization: Bearer YOUR_API_TOKEN&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &#39;{&quot;query&quot;: &quot;{ flows { id title status } }&quot;}&#39;

# REST API example
curl https://your-pentagi-instance:8443/api/v1/flows \
  -H &quot;Authorization: Bearer YOUR_API_TOKEN&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;API Exploration and Testing&lt;/h3&gt; 
&lt;p&gt;PentAGI provides interactive documentation for exploring and testing API endpoints:&lt;/p&gt; 
&lt;h4&gt;GraphQL Playground&lt;/h4&gt; 
&lt;p&gt;Access the GraphQL Playground at &lt;code&gt;https://your-pentagi-instance:8443/api/v1/graphql/playground&lt;/code&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Click the &lt;strong&gt;HTTP Headers&lt;/strong&gt; tab at the bottom&lt;/li&gt; 
 &lt;li&gt;Add your authorization header:&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;Authorization&quot;: &quot;Bearer YOUR_API_TOKEN&quot;
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Explore the schema, run queries, and test mutations interactively&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;Swagger UI&lt;/h4&gt; 
&lt;p&gt;Access the REST API documentation at &lt;code&gt;https://your-pentagi-instance:8443/api/v1/swagger/index.html&lt;/code&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Click the &lt;strong&gt;Authorize&lt;/strong&gt; button&lt;/li&gt; 
 &lt;li&gt;Enter your token in the format: &lt;code&gt;Bearer YOUR_API_TOKEN&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Click &lt;strong&gt;Authorize&lt;/strong&gt; to apply&lt;/li&gt; 
 &lt;li&gt;Test endpoints directly from the Swagger UI&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Generating API Clients&lt;/h3&gt; 
&lt;p&gt;You can generate type-safe API clients for your preferred programming language using the schema files included with PentAGI:&lt;/p&gt; 
&lt;h4&gt;GraphQL Clients&lt;/h4&gt; 
&lt;p&gt;The GraphQL schema is available at:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Web UI&lt;/strong&gt;: Navigate to Settings to download &lt;code&gt;schema.graphqls&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Direct file&lt;/strong&gt;: &lt;code&gt;backend/pkg/graph/schema.graphqls&lt;/code&gt; in the repository&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Generate clients using tools like:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;GraphQL Code Generator&lt;/strong&gt; (JavaScript/TypeScript): &lt;a href=&quot;https://the-guild.dev/graphql/codegen&quot;&gt;https://the-guild.dev/graphql/codegen&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;genqlient&lt;/strong&gt; (Go): &lt;a href=&quot;https://github.com/Khan/genqlient&quot;&gt;https://github.com/Khan/genqlient&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Apollo iOS&lt;/strong&gt; (Swift): &lt;a href=&quot;https://www.apollographql.com/docs/ios&quot;&gt;https://www.apollographql.com/docs/ios&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;REST API Clients&lt;/h4&gt; 
&lt;p&gt;The OpenAPI specification is available at:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Swagger JSON&lt;/strong&gt;: &lt;code&gt;https://your-pentagi-instance:8443/api/v1/swagger/doc.json&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Swagger YAML&lt;/strong&gt;: Available in &lt;code&gt;backend/pkg/server/docs/swagger.yaml&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Generate clients using:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;OpenAPI Generator&lt;/strong&gt;: &lt;a href=&quot;https://openapi-generator.tech&quot;&gt;https://openapi-generator.tech&lt;/a&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;openapi-generator-cli generate \
  -i https://your-pentagi-instance:8443/api/v1/swagger/doc.json \
  -g python \
  -o ./pentagi-client
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Swagger Codegen&lt;/strong&gt;: &lt;a href=&quot;https://github.com/swagger-api/swagger-codegen&quot;&gt;https://github.com/swagger-api/swagger-codegen&lt;/a&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;swagger-codegen generate \
  -i https://your-pentagi-instance:8443/api/v1/swagger/doc.json \
  -l typescript-axios \
  -o ./pentagi-client
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;swagger-typescript-api&lt;/strong&gt; (TypeScript): &lt;a href=&quot;https://github.com/acacode/swagger-typescript-api&quot;&gt;https://github.com/acacode/swagger-typescript-api&lt;/a&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npx swagger-typescript-api \
  -p https://your-pentagi-instance:8443/api/v1/swagger/doc.json \
  -o ./src/api \
  -n pentagi-api.ts
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;API Usage Examples&lt;/h3&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Creating a New Flow (GraphQL)&lt;/b&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-graphql&quot;&gt;mutation CreateFlow {
  createFlow(
    modelProvider: &quot;openai&quot;
    input: &quot;Test the security of https://example.com&quot;
  ) {
    id
    title
    status
    createdAt
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Listing Flows (REST API)&lt;/b&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl https://your-pentagi-instance:8443/api/v1/flows \
  -H &quot;Authorization: Bearer YOUR_API_TOKEN&quot; \
  | jq &#39;.flows[] | {id, title, status}&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Python Client Example&lt;/b&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import requests

class PentAGIClient:
    def __init__(self, base_url, api_token):
        self.base_url = base_url
        self.headers = {
            &quot;Authorization&quot;: f&quot;Bearer {api_token}&quot;,
            &quot;Content-Type&quot;: &quot;application/json&quot;
        }
    
    def create_flow(self, provider, target):
        query = &quot;&quot;&quot;
        mutation CreateFlow($provider: String!, $input: String!) {
          createFlow(modelProvider: $provider, input: $input) {
            id
            title
            status
          }
        }
        &quot;&quot;&quot;
        response = requests.post(
            f&quot;{self.base_url}/api/v1/graphql&quot;,
            json={
                &quot;query&quot;: query,
                &quot;variables&quot;: {
                    &quot;provider&quot;: provider,
                    &quot;input&quot;: target
                }
            },
            headers=self.headers
        )
        return response.json()
    
    def get_flows(self):
        response = requests.get(
            f&quot;{self.base_url}/api/v1/flows&quot;,
            headers=self.headers
        )
        return response.json()

# Usage
client = PentAGIClient(
    &quot;https://your-pentagi-instance:8443&quot;,
    &quot;your_api_token_here&quot;
)

# Create a new flow
flow = client.create_flow(&quot;openai&quot;, &quot;Scan https://example.com for vulnerabilities&quot;)
print(f&quot;Created flow: {flow}&quot;)

# List all flows
flows = client.get_flows()
print(f&quot;Total flows: {len(flows[&#39;flows&#39;])}&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;TypeScript Client Example&lt;/b&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-typescript&quot;&gt;import axios, { AxiosInstance } from &#39;axios&#39;;

interface Flow {
  id: string;
  title: string;
  status: string;
  createdAt: string;
}

class PentAGIClient {
  private client: AxiosInstance;

  constructor(baseURL: string, apiToken: string) {
    this.client = axios.create({
      baseURL: `${baseURL}/api/v1`,
      headers: {
        &#39;Authorization&#39;: `Bearer ${apiToken}`,
        &#39;Content-Type&#39;: &#39;application/json&#39;,
      },
    });
  }

  async createFlow(provider: string, input: string): Promise&amp;lt;Flow&amp;gt; {
    const query = `
      mutation CreateFlow($provider: String!, $input: String!) {
        createFlow(modelProvider: $provider, input: $input) {
          id
          title
          status
          createdAt
        }
      }
    `;

    const response = await this.client.post(&#39;/graphql&#39;, {
      query,
      variables: { provider, input },
    });

    return response.data.data.createFlow;
  }

  async getFlows(): Promise&amp;lt;Flow[]&amp;gt; {
    const response = await this.client.get(&#39;/flows&#39;);
    return response.data.flows;
  }

  async getFlow(flowId: string): Promise&amp;lt;Flow&amp;gt; {
    const response = await this.client.get(`/flows/${flowId}`);
    return response.data;
  }
}

// Usage
const client = new PentAGIClient(
  &#39;https://your-pentagi-instance:8443&#39;,
  &#39;your_api_token_here&#39;
);

// Create a new flow
const flow = await client.createFlow(
  &#39;openai&#39;,
  &#39;Perform penetration test on https://example.com&#39;
);
console.log(&#39;Created flow:&#39;, flow);

// List all flows
const flows = await client.getFlows();
console.log(`Total flows: ${flows.length}`);
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Security Best Practices&lt;/h3&gt; 
&lt;p&gt;When working with API tokens:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Never commit tokens to version control&lt;/strong&gt; - use environment variables or secrets management&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rotate tokens regularly&lt;/strong&gt; - set appropriate expiration dates and create new tokens periodically&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Use separate tokens for different applications&lt;/strong&gt; - makes it easier to revoke access if needed&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Monitor token usage&lt;/strong&gt; - review API token activity in the Settings page&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Revoke unused tokens&lt;/strong&gt; - disable or delete tokens that are no longer needed&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Use HTTPS only&lt;/strong&gt; - never send API tokens over unencrypted connections&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Token Management&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;View tokens&lt;/strong&gt;: See all your active tokens in Settings → API Tokens&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Edit tokens&lt;/strong&gt;: Update token names or revoke tokens&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Delete tokens&lt;/strong&gt;: Permanently remove tokens (this action cannot be undone)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Token ID&lt;/strong&gt;: Each token has a unique ID that can be copied for reference&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The token list shows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Token name (if provided)&lt;/li&gt; 
 &lt;li&gt;Token ID (unique identifier)&lt;/li&gt; 
 &lt;li&gt;Status (active/revoked/expired)&lt;/li&gt; 
 &lt;li&gt;Creation date&lt;/li&gt; 
 &lt;li&gt;Expiration date&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Custom LLM Provider Configuration&lt;/h3&gt; 
&lt;p&gt;When using custom LLM providers with the &lt;code&gt;LLM_SERVER_*&lt;/code&gt; variables, you can fine-tune the reasoning format used in requests.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;For production-grade local deployments, consider using &lt;strong&gt;vLLM&lt;/strong&gt; with &lt;strong&gt;Qwen3.5-27B-FP8&lt;/strong&gt; for optimal performance. See our &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/guides/vllm-qwen35-27b-fp8.md&quot;&gt;comprehensive deployment guide&lt;/a&gt; which includes hardware requirements, configuration templates (&lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/configs/vllm-qwen3.5-27b-fp8.provider.yml&quot;&gt;thinking mode&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/configs/vllm-qwen3.5-27b-fp8-no-think.provider.yml&quot;&gt;non-thinking mode&lt;/a&gt;), and performance benchmarks showing 13K TPS prompt processing on 4× RTX 5090 GPUs.&lt;/p&gt; 
&lt;/div&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;LLM_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Base URL for the custom LLM API endpoint&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;LLM_SERVER_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;API key for the custom LLM provider&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;LLM_SERVER_MODEL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Default model to use (can be overridden in provider config)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;LLM_SERVER_CONFIG_PATH&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Path to the YAML configuration file for agent-specific models&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;LLM_SERVER_PROVIDER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Provider name prefix for model names (e.g., &lt;code&gt;openrouter&lt;/code&gt;, &lt;code&gt;deepseek&lt;/code&gt; for LiteLLM proxy)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;LLM_SERVER_LEGACY_REASONING&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Controls reasoning format in API requests&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;LLM_SERVER_PRESERVE_REASONING&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Preserve reasoning content in multi-turn conversations (required by some providers)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The &lt;code&gt;LLM_SERVER_PROVIDER&lt;/code&gt; setting is particularly useful when using &lt;strong&gt;LiteLLM proxy&lt;/strong&gt;, which adds a provider prefix to model names. For example, when connecting to Moonshot API through LiteLLM, models like &lt;code&gt;kimi-2.5&lt;/code&gt; become &lt;code&gt;moonshot/kimi-2.5&lt;/code&gt;. By setting &lt;code&gt;LLM_SERVER_PROVIDER=moonshot&lt;/code&gt;, you can use the same provider configuration file for both direct API access and LiteLLM proxy access without modifications.&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;LLM_SERVER_LEGACY_REASONING&lt;/code&gt; setting affects how reasoning parameters are sent to the LLM:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;false&lt;/code&gt; (default): Uses modern format where reasoning is sent as a structured object with &lt;code&gt;max_tokens&lt;/code&gt; parameter&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;true&lt;/code&gt;: Uses legacy format with string-based &lt;code&gt;reasoning_effort&lt;/code&gt; parameter&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This setting is important when working with different LLM providers as they may expect different reasoning formats in their API requests. If you encounter reasoning-related errors with custom providers, try changing this setting.&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;LLM_SERVER_PRESERVE_REASONING&lt;/code&gt; setting controls whether reasoning content is preserved in multi-turn conversations:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;false&lt;/code&gt; (default): Reasoning content is not preserved in conversation history&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;true&lt;/code&gt;: Reasoning content is preserved and sent in subsequent API calls&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This setting is required by some LLM providers (e.g., Moonshot) that return errors like &quot;thinking is enabled but reasoning_content is missing in assistant tool call message&quot; when reasoning content is not included in multi-turn conversations. Enable this setting if your provider requires reasoning content to be preserved.&lt;/p&gt; 
&lt;h4&gt;Troubleshooting: tool-call (function-call) parser errors&lt;/h4&gt; 
&lt;p&gt;PentAGI drives its agents with tool calls (also called function calls), so any custom OpenAI-compatible backend configured through &lt;code&gt;LLM_SERVER_*&lt;/code&gt; must return valid tool-call JSON in the format the OpenAI Chat Completions API defines. When the backend emits malformed, truncated, or non-conforming tool-call arguments, the agent chain cannot continue.&lt;/p&gt; 
&lt;p&gt;Self-hosted engines such as llama.cpp, SGLang, and vLLM usually require a specific tool-call parser and a matching chat template to produce correct tool-call output. If the parser is missing or mismatched for the model you are serving, tool-call arguments can come back corrupted. Compatibility therefore depends on the backend&#39;s tool-call/function-call behavior and configuration, not on PentAGI alone; not every llama.cpp or SGLang setup produces valid tool calls out of the box.&lt;/p&gt; 
&lt;p&gt;Typical symptoms:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Backend or proxy errors such as &lt;code&gt;Failed to parse tool call arguments as JSON&lt;/code&gt; (often surfaced through a LiteLLM proxy as an HTTP 500), or other unexpected 5xx/4xx responses from the LLM endpoint.&lt;/li&gt; 
 &lt;li&gt;A flow that runs for a few steps and then stops responding to new input in the UI.&lt;/li&gt; 
 &lt;li&gt;Repeated or looping tool calls that never converge.&lt;/li&gt; 
 &lt;li&gt;A flow that fails right at the start with &lt;code&gt;failed to select primary docker image via llm call&lt;/code&gt;, because the first action in a flow is an LLM tool call to choose the container image; a backend that cannot return a valid tool call fails at this step too.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;How to investigate:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Check both sides of the connection: the PentAGI logs (&lt;code&gt;docker compose logs -f pentagi&lt;/code&gt;) and the inference backend or proxy logs (llama.cpp, SGLang, vLLM, or LiteLLM). The backend log usually shows the same parse error when it produced the malformed tool call.&lt;/li&gt; 
 &lt;li&gt;Validate the provider before running a full flow with the &lt;code&gt;ctester&lt;/code&gt; utility, which exercises tool-calling agent types directly. See &lt;a href=&quot;https://github.com/vxcontrol/pentagi#testing-llm-agents&quot;&gt;Testing LLM Agents&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Confirm the backend&#39;s tool-call parser and chat template are the ones recommended for the model you are serving, and that the model itself supports tool calling.&lt;/li&gt; 
 &lt;li&gt;Update PentAGI to the latest build. Recent versions sanitize malformed function-call arguments returned by the model so a single bad response no longer stalls the whole flow; older builds forwarded the corrupted arguments and could get stuck.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Ollama Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI supports Ollama for both local LLM inference (zero-cost, enhanced privacy) and Ollama Cloud (managed service with free tier).&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OLLAMA_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;URL of your Ollama server or Ollama Cloud&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OLLAMA_SERVER_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;API key for Ollama Cloud authentication&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OLLAMA_SERVER_MODEL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Default model for inference&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OLLAMA_SERVER_CONFIG_PATH&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Path to custom agent configuration file&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OLLAMA_SERVER_PULL_MODELS_TIMEOUT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;600&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Timeout for model downloads (seconds)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OLLAMA_SERVER_PULL_MODELS_ENABLED&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Auto-download models on startup&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OLLAMA_SERVER_LOAD_MODELS_ENABLED&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Query server for available models&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Ollama Cloud Configuration&lt;/h4&gt; 
&lt;p&gt;Ollama Cloud provides managed inference with a generous free tier and scalable paid plans.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Free Tier Setup (Single Model)&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Free tier allows one model at a time
OLLAMA_SERVER_URL=https://ollama.com
OLLAMA_SERVER_API_KEY=your_ollama_cloud_api_key
OLLAMA_SERVER_MODEL=gpt-oss:120b  # Example: OpenAI OSS 120B model
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Paid Tier Setup (Multi-Model with Pre-built Configuration)&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;For paid tiers supporting multiple concurrent models, use the pre-built Ollama Cloud configuration:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Using pre-built Ollama Cloud configuration (included in Docker image)
OLLAMA_SERVER_URL=https://ollama.com
OLLAMA_SERVER_API_KEY=your_ollama_cloud_api_key
OLLAMA_SERVER_CONFIG_PATH=/opt/pentagi/conf/ollama-cloud.provider.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The pre-built &lt;code&gt;ollama-cloud.provider.yml&lt;/code&gt; configuration includes optimized model assignments for all agent types:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Simple/Assistant&lt;/strong&gt;: &lt;code&gt;nemotron-3-super:cloud&lt;/code&gt; - Fast general-purpose model&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Primary Agent&lt;/strong&gt;: &lt;code&gt;qwen3-coder-next:cloud&lt;/code&gt; - Advanced reasoning with high effort mode&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Coder/Pentester&lt;/strong&gt;: &lt;code&gt;qwen3-coder-next:cloud&lt;/code&gt; - Specialized coding models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Searcher&lt;/strong&gt;: &lt;code&gt;qwen3.5:397b-cloud&lt;/code&gt; - Large context for information gathering&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Refiner/Refactor&lt;/strong&gt;: &lt;code&gt;glm-5:cloud&lt;/code&gt; - High-quality text refinement&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Adviser/Enricher&lt;/strong&gt;: &lt;code&gt;minimax-m2.7:cloud&lt;/code&gt; - Efficient advisory tasks&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Installer&lt;/strong&gt;: &lt;code&gt;devstral-2:123b-cloud&lt;/code&gt; - Installation and setup tasks&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Custom Configuration (Advanced)&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;To create your own agent configuration, mount a custom file from your host filesystem:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Using custom provider configuration
OLLAMA_SERVER_URL=https://ollama.com
OLLAMA_SERVER_API_KEY=your_ollama_cloud_api_key
OLLAMA_SERVER_CONFIG_PATH=/opt/pentagi/conf/ollama.provider.yml

# Mount custom configuration from host filesystem (in .env or docker-compose override)
PENTAGI_OLLAMA_SERVER_CONFIG_PATH=/path/on/host/my-ollama-config.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;PENTAGI_OLLAMA_SERVER_CONFIG_PATH&lt;/code&gt; environment variable maps your host configuration file to &lt;code&gt;/opt/pentagi/conf/ollama.provider.yml&lt;/code&gt; inside the container.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Example custom configuration&lt;/strong&gt; (&lt;code&gt;my-ollama-config.yml&lt;/code&gt;):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;primary_agent:
  model: &quot;qwen3-coder-next:cloud&quot;
  temperature: 1.0
  top_p: 0.9
  max_tokens: 32768
  reasoning:
    effort: high

coder:
  model: &quot;qwen3-coder:32b&quot;
  temperature: 1.0
  max_tokens: 20480
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Local Ollama Configuration&lt;/h4&gt; 
&lt;p&gt;For self-hosted Ollama instances:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Basic local Ollama setup
OLLAMA_SERVER_URL=http://localhost:11434
OLLAMA_SERVER_MODEL=llama3.1:8b-instruct-q8_0

# Production setup with auto-pull and model discovery
OLLAMA_SERVER_URL=http://ollama-server:11434
OLLAMA_SERVER_PULL_MODELS_ENABLED=true
OLLAMA_SERVER_PULL_MODELS_TIMEOUT=900
OLLAMA_SERVER_LOAD_MODELS_ENABLED=true

# Using pre-built configurations from Docker image
OLLAMA_SERVER_CONFIG_PATH=/opt/pentagi/conf/ollama-llama318b.provider.yml
# or
OLLAMA_SERVER_CONFIG_PATH=/opt/pentagi/conf/ollama-qwen332b-fp16-tc.provider.yml
# or
OLLAMA_SERVER_CONFIG_PATH=/opt/pentagi/conf/ollama-qwq32b-fp16-tc.provider.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Performance Considerations:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Model Discovery&lt;/strong&gt; (&lt;code&gt;OLLAMA_SERVER_LOAD_MODELS_ENABLED=true&lt;/code&gt;): Adds 1-2s startup latency querying Ollama API&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Auto-pull&lt;/strong&gt; (&lt;code&gt;OLLAMA_SERVER_PULL_MODELS_ENABLED=true&lt;/code&gt;): First startup may take several minutes downloading models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Pull timeout&lt;/strong&gt; (&lt;code&gt;OLLAMA_SERVER_PULL_MODELS_TIMEOUT=900&lt;/code&gt;): 15 minutes in seconds&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Static Config&lt;/strong&gt;: Disable both flags and specify models in config file for fastest startup&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Creating Custom Ollama Models with Extended Context&lt;/h4&gt; 
&lt;p&gt;PentAGI requires models with larger context windows than the default Ollama configurations. You need to create custom models with increased &lt;code&gt;num_ctx&lt;/code&gt; parameter through Modelfiles. While typical agent workflows consume around 64K tokens, PentAGI uses 110K context size for safety margin and handling complex penetration testing scenarios.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: The &lt;code&gt;num_ctx&lt;/code&gt; parameter can only be set during model creation via Modelfile - it cannot be changed after model creation or overridden at runtime.&lt;/p&gt; 
&lt;h5&gt;Example: Qwen3 32B FP16 with Extended Context&lt;/h5&gt; 
&lt;p&gt;Create a Modelfile named &lt;code&gt;Modelfile_qwen3_32b_fp16_tc&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;FROM qwen3:32b-fp16
PARAMETER num_ctx 110000
PARAMETER temperature 0.3
PARAMETER top_p 0.8
PARAMETER min_p 0.0
PARAMETER top_k 20
PARAMETER repeat_penalty 1.1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Build the custom model:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ollama create qwen3:32b-fp16-tc -f Modelfile_qwen3_32b_fp16_tc
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Example: QwQ 32B FP16 with Extended Context&lt;/h5&gt; 
&lt;p&gt;Create a Modelfile named &lt;code&gt;Modelfile_qwq_32b_fp16_tc&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;FROM qwq:32b-fp16
PARAMETER num_ctx 110000
PARAMETER temperature 0.2
PARAMETER top_p 0.7
PARAMETER min_p 0.0
PARAMETER top_k 40
PARAMETER repeat_penalty 1.2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Build the custom model:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ollama create qwq:32b-fp16-tc -f Modelfile_qwq_32b_fp16_tc
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The QwQ 32B FP16 model requires approximately &lt;strong&gt;71.3 GB VRAM&lt;/strong&gt; for inference. Ensure your system has sufficient GPU memory before attempting to use this model.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;These custom models are referenced in the pre-built provider configuration files (&lt;code&gt;ollama-qwen332b-fp16-tc.provider.yml&lt;/code&gt; and &lt;code&gt;ollama-qwq32b-fp16-tc.provider.yml&lt;/code&gt;) that are included in the Docker image at &lt;code&gt;/opt/pentagi/conf/&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;OpenAI Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with OpenAI&#39;s comprehensive model lineup, featuring advanced reasoning capabilities with extended chain-of-thought, agentic models with enhanced tool integration, and specialized code models for security engineering.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OPEN_AI_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;API key for OpenAI services&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;OPEN_AI_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://api.openai.com/v1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;OpenAI API endpoint&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Basic OpenAI setup
OPEN_AI_KEY=your_openai_api_key
OPEN_AI_SERVER_URL=https://api.openai.com/v1

# Using with proxy for enhanced security
OPEN_AI_KEY=your_openai_api_key
PROXY_URL=http://your-proxy:8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI supports 32 OpenAI models with tool calling, streaming, reasoning modes, and prompt caching. Models marked with &lt;code&gt;*&lt;/code&gt; are used in default configuration. Models marked &lt;code&gt;⚠️&lt;/code&gt; are deprecated by OpenAI and kept only for backward compatibility with agent configs already pinned to those names — avoid them for new assignments.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;GPT-5.6 Series - Latest Frontier (Feb 2026 knowledge cutoff, 1.05M context, 128K max output)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Reasoning Effort&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;low/medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$5.00/$30.00/$0.50&lt;/td&gt; 
   &lt;td&gt;Frontier model for complex professional work, most demanding autonomous pentesting, sophisticated exploit chain development, deep multi-stage attack simulation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.6-terra&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;low/medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$2.50/$15.00/$0.25&lt;/td&gt; 
   &lt;td&gt;Balances intelligence and cost; multi-phase security assessments, coordinated multi-tool pentesting (generator/refiner/adviser/coder default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.6-luna&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;low/medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$1.00/$6.00/$0.10&lt;/td&gt; 
   &lt;td&gt;Optimized for cost-sensitive, high-volume workloads; rapid reconnaissance, bulk vulnerability scanning, real-time monitoring&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GPT-5.5 Series - Frontier (Dec 2025 knowledge cutoff, 1.05M context, 128K max output)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Reasoning Effort&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;none/low/medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$5.00/$30.00/$0.50&lt;/td&gt; 
   &lt;td&gt;New class of intelligence for coding and professional work; complex security research, advanced autonomous pentesting&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.5-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$30.00/$180.00/$0.00&lt;/td&gt; 
   &lt;td&gt;Uses more compute for smarter, more precise responses; no cached-input discount; mission-critical security research, zero-day discovery&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GPT-5.4 Series - Advanced Reasoning at Scale (1M context)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Reasoning Effort&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.4&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;low/medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$2.50/$15.00/$0.25&lt;/td&gt; 
   &lt;td&gt;Best intelligence at scale for agentic, coding, and professional workflows; maximum cognitive depth for pentesting&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.4-mini&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;low/medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$0.75/$4.50/$0.075&lt;/td&gt; 
   &lt;td&gt;Strongest mini model for coding, computer use, subagents (primary_agent/assistant/reflector/installer/pentester default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.4-nano&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;low/medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$0.20/$1.25/$0.02&lt;/td&gt; 
   &lt;td&gt;Cheapest GPT-5.4-class model for simple, high-volume tasks (simple/simple_json/searcher/enricher default)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GPT-5.2 Series - Previous Flagship Agentic&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Reasoning Effort&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.2&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;low/medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$1.75/$14.00/$0.175&lt;/td&gt; 
   &lt;td&gt;Superseded by 5.4/5.6; autonomous security research, complex exploit chain development&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.2-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;medium/high/xhigh&lt;/td&gt; 
   &lt;td&gt;$21.00/$168.00/$0.00&lt;/td&gt; 
   &lt;td&gt;Superior agentic coding and long-context performance, mission-critical security research, zero-day discovery&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GPT-5/5.1 Series - Advanced Agentic Models&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.25/$10.00/$0.125&lt;/td&gt; 
   &lt;td&gt;Autonomous security research, exploit chain development, coordinating multi-tool pentesting workflows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.25/$10.00/$0.125&lt;/td&gt; 
   &lt;td&gt;Bridges GPT-5 and GPT-5.2 with faster responses; balanced penetration testing with strong tool coordination&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ (high)&lt;/td&gt; 
   &lt;td&gt;$15.00/$120.00/$0.00&lt;/td&gt; 
   &lt;td&gt;Reduced hallucinations, exceptional accuracy, critical security operations&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5-mini&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.25/$2.00/$0.025&lt;/td&gt; 
   &lt;td&gt;Automated vulnerability analysis, exploit generation with strong function calling&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5-nano&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.05/$0.40/$0.005&lt;/td&gt; 
   &lt;td&gt;High-throughput security scanning, reconnaissance, real-time monitoring&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GPT-4.1 Series - Enhanced Intelligence (Non-Reasoning)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-4.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$2.00/$8.00/$0.50&lt;/td&gt; 
   &lt;td&gt;Superior function calling, complex threat analysis, sophisticated exploit development&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-4.1-mini&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.40/$1.60/$0.10&lt;/td&gt; 
   &lt;td&gt;Routine security assessments, automated code analysis (no longer used in default configuration)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GPT-4o Series - Multimodal (Non-Reasoning)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-4o-mini&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.15/$0.60/$0.075&lt;/td&gt; 
   &lt;td&gt;Compact multimodal with strong function calling, high-frequency scanning, cost-effective bulk operations&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;o-Series - Advanced Reasoning Models (Current)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;o3&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$2.00/$8.00/$0.50&lt;/td&gt; 
   &lt;td&gt;Succeeded by GPT-5; multi-stage attack chains, deep vulnerability analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;o3-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$20.00/$80.00/$0.00&lt;/td&gt; 
   &lt;td&gt;More compute for better responses; zero-day research, critical security investigations&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Deprecated Models - Kept for Backward Compatibility ⚠️&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;These models were marked deprecated by OpenAI. PentAGI keeps them defined only so that pre-existing agent configs pinned to these names keep working; do not assign them to new agents.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Notes&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.2-codex&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.75/$14.00/$0.175&lt;/td&gt; 
   &lt;td&gt;Superseded code-specialized model; use &lt;code&gt;gpt-5.6-terra&lt;/code&gt;/&lt;code&gt;gpt-5.4-mini&lt;/code&gt; instead&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.1-codex-max&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.25/$10.00/$0.125&lt;/td&gt; 
   &lt;td&gt;Superseded; enhanced reasoning for coding workflows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.1-codex&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.25/$10.00/$0.125&lt;/td&gt; 
   &lt;td&gt;Superseded standard code-optimized model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5-codex&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.25/$10.00/$0.125&lt;/td&gt; 
   &lt;td&gt;Superseded foundational code-specialized model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-5.1-codex-mini&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.25/$2.00/$0.025&lt;/td&gt; 
   &lt;td&gt;Superseded compact code model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;codex-mini-latest&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.50/$6.00/$0.375&lt;/td&gt; 
   &lt;td&gt;Superseded compact code model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-4o&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$2.50/$10.00/$1.25&lt;/td&gt; 
   &lt;td&gt;Superseded by GPT-5.x/5.6 series multimodal flagship&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gpt-4.1-nano&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.10/$0.40/$0.025&lt;/td&gt; 
   &lt;td&gt;Superseded ultra-fast lightweight model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;o3-mini&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.10/$4.40/$0.55&lt;/td&gt; 
   &lt;td&gt;Superseded compact reasoning model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;o4-mini&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.10/$4.40/$0.275&lt;/td&gt; 
   &lt;td&gt;Succeeded by &lt;code&gt;gpt-5-mini&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;o1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$15.00/$60.00/$7.50&lt;/td&gt; 
   &lt;td&gt;Superseded premier reasoning model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;o1-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$150.00/$600.00/$0.00&lt;/td&gt; 
   &lt;td&gt;Superseded, highest cost point of the o-series&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Prices&lt;/strong&gt;: Per 1M tokens. Reasoning models include thinking tokens in output pricing.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;GPT-5/5.1/5.2 Models - Trusted Access Required&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;The original GPT-5, GPT-5.1, and GPT-5.2 models (&lt;code&gt;gpt-5&lt;/code&gt;, &lt;code&gt;gpt-5.1&lt;/code&gt;, &lt;code&gt;gpt-5.2&lt;/code&gt;, &lt;code&gt;gpt-5-pro&lt;/code&gt;, &lt;code&gt;gpt-5.2-pro&lt;/code&gt;, and all deprecated Codex variants) work &lt;strong&gt;unstably with PentAGI&lt;/strong&gt; and may trigger OpenAI&#39;s cybersecurity safety mechanisms without verified access. This does not affect the newer GPT-5.4/5.5/5.6 series used in PentAGI&#39;s default configuration below.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;To use these models reliably:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;strong&gt;Individual users&lt;/strong&gt;: Verify your identity at &lt;a href=&quot;https://chatgpt.com/cyber&quot;&gt;chatgpt.com/cyber&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Enterprise teams&lt;/strong&gt;: Request trusted access through your OpenAI representative&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Security researchers&lt;/strong&gt;: Apply for the &lt;a href=&quot;https://openai.com/form/cybersecurity-grant-program/&quot;&gt;Cybersecurity Grant Program&lt;/a&gt; (includes $10M in API credits)&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;&lt;strong&gt;Recommended alternatives without verification:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Use PentAGI&#39;s defaults — &lt;code&gt;gpt-5.4-mini&lt;/code&gt;/&lt;code&gt;gpt-5.4-nano&lt;/code&gt;/&lt;code&gt;gpt-5.6-terra&lt;/code&gt; — which work out of the box&lt;/li&gt; 
  &lt;li&gt;Use &lt;code&gt;o3&lt;/code&gt;/&lt;code&gt;o3-pro&lt;/code&gt; for reasoning tasks&lt;/li&gt; 
  &lt;li&gt;Use &lt;code&gt;gpt-4.1&lt;/code&gt; series for general intelligence and function calling without reasoning&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Reasoning Configuration&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Reasoning forced off by default&lt;/strong&gt;: every default agent assigned &lt;code&gt;gpt-5.4-mini&lt;/code&gt; or &lt;code&gt;gpt-5.6-terra&lt;/code&gt; (primary_agent, assistant, generator, refiner, adviser, reflector, coder, installer, pentester) sets &lt;code&gt;reasoning: {mode: off}&lt;/code&gt; — this genuinely disables reasoning, it is not simply &quot;low effort&quot;. PentAGI calls OpenAI exclusively through &lt;code&gt;/v1/chat/completions&lt;/code&gt; (never &lt;code&gt;/v1/responses&lt;/code&gt;), and this endpoint rejects requests that combine function tools with these models&#39; default-on thinking; forcing thinking off is required for tool calls to work reliably (see the investigation notes in &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/backend/pkg/providers/openai/config.yml&quot;&gt;&lt;code&gt;backend/pkg/providers/openai/config.yml&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;No override needed for &lt;code&gt;gpt-5.4-nano&lt;/code&gt;&lt;/strong&gt;: used for simple, simple_json, searcher, and enricher, this tier does not default to thinking on, so tools attach without conflict and no &lt;code&gt;reasoning&lt;/code&gt; override is required.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Manual tuning available&lt;/strong&gt;: outside the default assignments, GPT-5.6/5.5/5.4/5.2 series models expose explicit reasoning effort levels (&lt;code&gt;low&lt;/code&gt;/&lt;code&gt;medium&lt;/code&gt;/&lt;code&gt;high&lt;/code&gt;/&lt;code&gt;xhigh&lt;/code&gt;, plus &lt;code&gt;none&lt;/code&gt; on GPT-5.5) for custom agent configs that need variable reasoning depth with tool calling disabled or via &lt;code&gt;/v1/responses&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Extended Reasoning&lt;/strong&gt;: GPT-5.4/5.5/5.6 and o-series models with chain-of-thought for complex security analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Agentic Intelligence&lt;/strong&gt;: GPT-5.4/5.5/5.6 series with enhanced tool integration, million-token context windows, and autonomous capabilities&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Prompt Caching&lt;/strong&gt;: Cost reduction on repeated context (10-50% of input price)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Code Specialization&lt;/strong&gt;: Legacy Codex models remain available (deprecated) for vulnerability discovery and exploit development in pinned configs&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multimodal Support&lt;/strong&gt;: &lt;code&gt;gpt-4o-mini&lt;/code&gt; for vision-based security assessments&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tool Calling&lt;/strong&gt;: Robust function calling across all models for pentesting tool orchestration&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Streaming&lt;/strong&gt;: Real-time response streaming for interactive workflows&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Proven Track Record&lt;/strong&gt;: Industry-leading models with CVE discoveries and real-world security applications&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Anthropic Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with Anthropic&#39;s Claude models, featuring advanced extended thinking capabilities, exceptional safety mechanisms, and sophisticated understanding of complex security contexts with prompt caching.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;API key for Anthropic services&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ANTHROPIC_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://api.anthropic.com/v1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Anthropic API endpoint&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Basic Anthropic setup
ANTHROPIC_API_KEY=your_anthropic_api_key
ANTHROPIC_SERVER_URL=https://api.anthropic.com/v1

# Using with proxy for secure environments
ANTHROPIC_API_KEY=your_anthropic_api_key
PROXY_URL=http://your-proxy:8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Google Vertex AI for Claude models&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;PentAGI does not currently expose a dedicated Google Vertex AI configuration path for Anthropic Claude in &lt;code&gt;.env&lt;/code&gt;. There is no separate Vertex AI API key field at this time, and the existing Anthropic variables (&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;, &lt;code&gt;ANTHROPIC_SERVER_URL&lt;/code&gt;) target the direct Anthropic API. Supported routes for Claude are:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Direct Anthropic API&lt;/strong&gt;: &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; and &lt;code&gt;ANTHROPIC_SERVER_URL&lt;/code&gt; (see above).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;AWS Bedrock&lt;/strong&gt;: &lt;code&gt;BEDROCK_*&lt;/code&gt; variables (see &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#aws-bedrock-provider-configuration&quot;&gt;AWS Bedrock Provider Configuration&lt;/a&gt;).&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;If you need to use Vertex AI today, the safest supported workaround is to expose Vertex AI through an OpenAI-compatible proxy or gateway that translates Vertex AI calls into the Chat Completions format while preserving the chat and tool-call behavior PentAGI relies on, then point the Custom LLM provider at that gateway via &lt;code&gt;LLM_SERVER_URL&lt;/code&gt;, &lt;code&gt;LLM_SERVER_KEY&lt;/code&gt;, and &lt;code&gt;LLM_SERVER_MODEL&lt;/code&gt;. This path is only as reliable as the gateway you choose.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI supports 9 Claude models with tool calling, streaming, extended thinking, adaptive thinking, and prompt caching. Models marked with &lt;code&gt;*&lt;/code&gt; are used in default configuration.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Claude 5 Series - Newest Models (2026)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Release Date&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache R/W)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-sonnet-5&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;Jul 2026&lt;/td&gt; 
   &lt;td&gt;$3.00/$15.00/$0.30/$3.75&lt;/td&gt; 
   &lt;td&gt;Best combination of speed and intelligence for coding, agents, and professional work at scale. Adaptive thinking only (manual budget thinking rejected); sampling parameters not supported. Default model for primary agent, assistant, coder, adviser, installer, pentester&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-fable-5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;Jun 2026&lt;/td&gt; 
   &lt;td&gt;$10.00/$50.00/$1.00/$12.50&lt;/td&gt; 
   &lt;td&gt;Anthropic&#39;s most capable widely released model for long-running agents and the most demanding reasoning workloads. Adaptive thinking always on (budget thinking and an explicit disable are rejected); sampling parameters not supported&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Claude 4 Series&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Release Date&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache R/W)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-opus-4-8&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;May 2026&lt;/td&gt; 
   &lt;td&gt;$5.00/$25.00/$0.50/$6.25&lt;/td&gt; 
   &lt;td&gt;Flagship for coding, agents, and deep reasoning in enterprise security workflows. Adaptive thinking only — budget thinking and sampling params (temperature/top_p/top_k) are rejected. Default model for generator and refiner; most demanding exploit development and multi-stage attack simulation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-opus-4-7&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;Apr 2026&lt;/td&gt; 
   &lt;td&gt;$5.00/$25.00/$0.50/$6.25&lt;/td&gt; 
   &lt;td&gt;Advanced software engineering and long-running agentic security analysis. Adaptive thinking only (manual budget thinking rejected)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-sonnet-4-6&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;Feb 2026&lt;/td&gt; 
   &lt;td&gt;$3.00/$15.00/$0.30/$3.75&lt;/td&gt; 
   &lt;td&gt;Best speed/intelligence balance with adaptive thinking. Multi-phase security assessments, intelligent vulnerability analysis, real-time threat hunting&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-opus-4-6&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;Feb 2026&lt;/td&gt; 
   &lt;td&gt;$5.00/$25.00/$0.50/$6.25&lt;/td&gt; 
   &lt;td&gt;Most intelligent model for autonomous agents and coding. Extended + adaptive thinking for complex exploit development, multi-stage attack simulation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-haiku-4-5&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;Oct 2025&lt;/td&gt; 
   &lt;td&gt;$1.00/$5.00/$0.10/$1.25&lt;/td&gt; 
   &lt;td&gt;Fast and efficient model with exceptional function calling and low latency, no thinking support. Default model for simple, simple_json, reflector, searcher, enricher; high-frequency scanning, real-time monitoring, bulk automated testing&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Legacy Models - Still Supported&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Release Date&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache R/W)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-sonnet-4-5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;Sep 2025&lt;/td&gt; 
   &lt;td&gt;$3.00/$15.00/$0.30/$3.75&lt;/td&gt; 
   &lt;td&gt;State-of-the-art reasoning (superseded by sonnet-4-6/sonnet-5). Sophisticated penetration testing, advanced threat analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;claude-opus-4-5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;Nov 2025&lt;/td&gt; 
   &lt;td&gt;$5.00/$25.00/$0.50/$6.25&lt;/td&gt; 
   &lt;td&gt;Ultimate reasoning (superseded by opus-4-6/4-7/4-8). Critical security research, zero-day discovery, red team operations&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Prices&lt;/strong&gt;: Per 1M tokens. Cache pricing includes both Read and Write costs.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Extended Thinking Configuration&lt;/strong&gt; (default agent config, see &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/backend/pkg/providers/anthropic/config.yml&quot;&gt;&lt;code&gt;backend/pkg/providers/anthropic/config.yml&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Generator / Refiner&lt;/strong&gt; (&lt;code&gt;claude-opus-4-8&lt;/code&gt;): adaptive reasoning at &lt;code&gt;xhigh&lt;/code&gt;/&lt;code&gt;high&lt;/code&gt; effort for maximum reasoning depth on complex exploit development&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Primary agent, assistant, coder, adviser, installer, pentester&lt;/strong&gt; (&lt;code&gt;claude-sonnet-5&lt;/code&gt;): adaptive reasoning (adviser at &lt;code&gt;xhigh&lt;/code&gt; effort) for balanced code analysis and vulnerability research&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reflector, searcher&lt;/strong&gt; (&lt;code&gt;claude-haiku-4-5&lt;/code&gt;): fixed reasoning budget of 1024 tokens for focused reasoning on specific tasks&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Simple, simple_json, enricher&lt;/strong&gt; (&lt;code&gt;claude-haiku-4-5&lt;/code&gt;): no thinking, optimized for speed&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Extended Thinking&lt;/strong&gt;: All Claude 4.5+ models support configurable chain-of-thought reasoning depths for complex security analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Adaptive Thinking&lt;/strong&gt;: Claude 4.6 series (Opus/Sonnet) dynamically adjusts reasoning depth based on task complexity; Claude Opus 4.7/4.8 and the Claude 5 series (Sonnet/Fable) are adaptive-thinking-only (manual budget thinking and sampling parameters are rejected with HTTP 400)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Prompt Caching&lt;/strong&gt;: Significant cost reduction with separate read/write pricing (10% read, 125% write of input)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Extended Context Window&lt;/strong&gt;: 200K tokens standard, up to 1M tokens (beta) for Claude Opus/Sonnet 4.6 for comprehensive codebase analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tool Calling&lt;/strong&gt;: Robust function calling with exceptional accuracy for security tool orchestration&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Streaming&lt;/strong&gt;: Real-time response streaming for interactive penetration testing workflows&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Safety-First Design&lt;/strong&gt;: Built-in safety mechanisms ensuring responsible security testing practices&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multimodal Support&lt;/strong&gt;: Vision capabilities in latest models for screenshot analysis and UI security assessment&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Constitutional AI&lt;/strong&gt;: Advanced safety training providing reliable and ethical security guidance&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Google AI (Gemini) Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with Google&#39;s Gemini models through the Google AI API, offering state-of-the-art multimodal reasoning capabilities with extended thinking and context caching.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GEMINI_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;API key for Google AI services&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GEMINI_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://generativelanguage.googleapis.com&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Google AI API endpoint&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Basic Gemini setup
GEMINI_API_KEY=your_gemini_api_key
GEMINI_SERVER_URL=https://generativelanguage.googleapis.com

# Using with proxy
GEMINI_API_KEY=your_gemini_api_key
PROXY_URL=http://your-proxy:8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI supports 9 Gemini models with tool calling, streaming, thinking modes, and context caching. Models marked with &lt;code&gt;*&lt;/code&gt; are used in default configuration.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Gemini 3.5 Series - Latest Stable Flash (May 2026)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemini-3.5-flash&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$1.50/$9.00/$0.15&lt;/td&gt; 
   &lt;td&gt;Most intelligent Flash model with sustained frontier performance on agentic and coding tasks, superior search and grounding&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Gemini 3.1 Series - Stable Flash-Lite + Pro Preview (Feb-May 2026)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemini-3.1-pro-preview&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$2.00/$12.00/$0.20&lt;/td&gt; 
   &lt;td&gt;Latest flagship with refined thinking, improved token efficiency, optimized for software engineering and agentic workflows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemini-3.1-pro-preview-customtools&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$2.00/$12.00/$0.20&lt;/td&gt; 
   &lt;td&gt;Custom tools endpoint optimized for bash and custom tools (view_file, search_code) prioritization&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemini-3.1-flash-lite&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$0.25/$1.50/$0.025&lt;/td&gt; 
   &lt;td&gt;Most cost-efficient stable multimodal model, frontier-class performance for high-volume agentic tasks and low-latency applications&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Gemini 2.5 Series - Advanced Thinking Models (active until October 16, 2026)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemini-2.5-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$1.25/$10.00/$0.125&lt;/td&gt; 
   &lt;td&gt;State-of-the-art for complex coding and reasoning, sophisticated threat modeling&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemini-2.5-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$0.30/$2.50/$0.03&lt;/td&gt; 
   &lt;td&gt;First hybrid reasoning model with thinking budgets, best price-performance for large-scale assessments&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemini-2.5-flash-lite&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$0.10/$0.40/$0.01&lt;/td&gt; 
   &lt;td&gt;Smallest and most cost-effective for at-scale usage, high-throughput scanning&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Gemma 4 Open-Source Models (Apache 2.0, Free Tier)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemma-4-31b-it&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;256K&lt;/td&gt; 
   &lt;td&gt;Free/Free/Free&lt;/td&gt; 
   &lt;td&gt;Largest open-source Gemma 4 dense model (~31B params), multimodal text+image, 140+ languages, on-premises security operations&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;256K&lt;/td&gt; 
   &lt;td&gt;Free/Free/Free&lt;/td&gt; 
   &lt;td&gt;MoE architecture (~26B total / ~3.8B active params), highly efficient inference on consumer GPUs for on-premises high-throughput scanning&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Prices&lt;/strong&gt;: Per 1M tokens (Standard Paid tier). Context window is input token limit.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Gemini 2.5 Series Shutdown&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;gemini-2.5-pro&lt;/code&gt;, &lt;code&gt;gemini-2.5-flash&lt;/code&gt;, and &lt;code&gt;gemini-2.5-flash-lite&lt;/code&gt; will be &lt;strong&gt;shut down on October 16, 2026&lt;/strong&gt;. Recommended migrations:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-pro&lt;/code&gt; → &lt;code&gt;gemini-3.1-pro-preview&lt;/code&gt; (same $2.00 input pricing tier)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-flash&lt;/code&gt; → &lt;code&gt;gemini-3.5-flash&lt;/code&gt; (improved frontier capabilities)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-flash-lite&lt;/code&gt; → &lt;code&gt;gemini-3.1-flash-lite&lt;/code&gt; (same $0.25 input pricing)&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Default Model Assignments (config.yml)&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;gemini-3.1-pro-preview&lt;/code&gt;&lt;/strong&gt; - &lt;code&gt;primary_agent&lt;/code&gt;, &lt;code&gt;assistant&lt;/code&gt;, &lt;code&gt;generator&lt;/code&gt;, &lt;code&gt;refiner&lt;/code&gt;, &lt;code&gt;adviser&lt;/code&gt;, &lt;code&gt;coder&lt;/code&gt;, &lt;code&gt;pentester&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;gemini-3.5-flash&lt;/code&gt;&lt;/strong&gt; - &lt;code&gt;reflector&lt;/code&gt;, &lt;code&gt;searcher&lt;/code&gt;, &lt;code&gt;enricher&lt;/code&gt;, &lt;code&gt;installer&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;gemini-3.1-flash-lite&lt;/code&gt;&lt;/strong&gt; - &lt;code&gt;simple&lt;/code&gt;, &lt;code&gt;simple_json&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Extended Thinking&lt;/strong&gt;: Step-by-step reasoning for complex security analysis (all Gemini 3.x, 2.5 series, and Gemma 4 with toggleable thinking)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Context Caching&lt;/strong&gt;: Significant cost reduction on repeated context (10% of input price for most models)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Ultra-Long Context&lt;/strong&gt;: 1M tokens for Gemini chat models, 256K tokens for Gemma 4 open-source models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multimodal Support&lt;/strong&gt;: Text, image, video, audio, and PDF processing for comprehensive assessments&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tool Calling&lt;/strong&gt;: Seamless integration with 20+ pentesting tools via function calling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Streaming&lt;/strong&gt;: Real-time response streaming for interactive security workflows&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Code Execution&lt;/strong&gt;: Built-in code execution for offensive tool testing and exploit validation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Search Grounding&lt;/strong&gt;: Google Search integration for threat intelligence and CVE research&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;File Search&lt;/strong&gt;: Document retrieval and RAG capabilities for knowledge-based assessments&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Batch API&lt;/strong&gt;: 50% cost reduction for non-real-time batch processing&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Custom Tools Endpoint&lt;/strong&gt;: Dedicated &lt;code&gt;gemini-3.1-pro-preview-customtools&lt;/code&gt; route for tool-heavy agentic workflows that prefer registered tools over bash&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Reasoning Effort Levels&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;High&lt;/strong&gt;: Maximum thinking depth for complex multi-step analysis (generator)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Medium&lt;/strong&gt;: Balanced reasoning for general agentic tasks (primary_agent, assistant, refiner, adviser)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Low&lt;/strong&gt;: Efficient thinking for focused tasks (coder, installer, pentester)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;AWS Bedrock Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with Amazon Bedrock, offering access to 20+ foundation models from leading AI companies including Anthropic, Amazon, Cohere, DeepSeek, OpenAI, Qwen, Mistral, and Moonshot.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BEDROCK_REGION&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;us-east-1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;AWS region for Bedrock service&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BEDROCK_DEFAULT_AUTH&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Use AWS SDK default credential chain (environment, EC2 role, ~/.aws/credentials) - highest priority&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BEDROCK_BEARER_TOKEN&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Bearer token authentication - priority over static credentials&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BEDROCK_ACCESS_KEY_ID&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;AWS access key ID for static credentials&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BEDROCK_SECRET_ACCESS_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;AWS secret access key for static credentials&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BEDROCK_SESSION_TOKEN&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;AWS session token for temporary credentials (optional, used with static credentials)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BEDROCK_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Custom Bedrock endpoint (VPC endpoints, local testing)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BEDROCK_CONFIG_PATH&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Path to a custom YAML provider config file (overrides the built-in default config for model/pricing definitions)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Authentication Priority&lt;/strong&gt;: &lt;code&gt;BEDROCK_DEFAULT_AUTH&lt;/code&gt; → &lt;code&gt;BEDROCK_BEARER_TOKEN&lt;/code&gt; → &lt;code&gt;BEDROCK_ACCESS_KEY_ID&lt;/code&gt;+&lt;code&gt;BEDROCK_SECRET_ACCESS_KEY&lt;/code&gt;&lt;/p&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Recommended: Default AWS SDK authentication (EC2/ECS/Lambda roles)
BEDROCK_REGION=us-east-1
BEDROCK_DEFAULT_AUTH=true

# Bearer token authentication (AWS STS, custom auth)
BEDROCK_REGION=us-east-1
BEDROCK_BEARER_TOKEN=your_bearer_token

# Static credentials (development, testing)
BEDROCK_REGION=us-east-1
BEDROCK_ACCESS_KEY_ID=your_aws_access_key
BEDROCK_SECRET_ACCESS_KEY=your_aws_secret_key

# With proxy and custom endpoint
BEDROCK_REGION=us-east-1
BEDROCK_DEFAULT_AUTH=true
BEDROCK_SERVER_URL=https://bedrock-runtime.us-east-1.vpce-xxx.amazonaws.com
PROXY_URL=http://your-proxy:8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Custom Provider Config and Models (advanced)&lt;/h4&gt; 
&lt;p&gt;By default the Bedrock provider uses a per-agent config and model catalog compiled into the binary. One optional path overrides them without rebuilding:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;BEDROCK_CONFIG_PATH&lt;/code&gt; — a YAML file (same shape as the other provider configs) that &lt;strong&gt;replaces&lt;/strong&gt; the built-in per-agent model/price assignments. See &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/configs/bedrock-glm-flash.provider.yml&quot;&gt;&lt;code&gt;examples/configs/bedrock-glm-flash.provider.yml&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This is useful to expose a Bedrock model newer than the compiled-in catalog — for example &lt;a href=&quot;http://Z.AI&quot;&gt;Z.AI&lt;/a&gt;&#39;s &lt;code&gt;zai.glm-4.7-flash&lt;/code&gt;. Use the exact Model ID from the model&#39;s AWS Bedrock detail page; add a &lt;code&gt;us.&lt;/code&gt;/&lt;code&gt;eu.&lt;/code&gt;/&lt;code&gt;apac.&lt;/code&gt; inference-profile prefix only when that page marks the model as requiring cross-region inference (&lt;code&gt;zai.glm-4.7-flash&lt;/code&gt; is In-Region, so it is used as-is, with no prefix).&lt;/p&gt; 
&lt;p&gt;With Docker Compose, set the host-side mount source and the in-container path together:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# host file mounted into the container at /opt/pentagi/conf/bedrock.provider.yml
PENTAGI_BEDROCK_CONFIG_PATH=./examples/configs/bedrock-glm-flash.provider.yml
# tell the backend to read the mounted file
BEDROCK_CONFIG_PATH=/opt/pentagi/conf/bedrock.provider.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI supports 24 AWS Bedrock models with tool calling, streaming, and multimodal capabilities. Models marked with &lt;code&gt;*&lt;/code&gt; are used in default configuration.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Provider&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Multimodal&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.amazon.nova-2-lite-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Amazon Nova&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.33/$2.75&lt;/td&gt; 
   &lt;td&gt;Adaptive reasoning, efficient thinking&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.amazon.nova-premier-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Amazon Nova&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$2.50/$12.50&lt;/td&gt; 
   &lt;td&gt;Complex reasoning, advanced analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.amazon.nova-pro-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Amazon Nova&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.80/$3.20&lt;/td&gt; 
   &lt;td&gt;Balanced accuracy, speed, cost&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.amazon.nova-lite-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Amazon Nova&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.06/$0.24&lt;/td&gt; 
   &lt;td&gt;Fast processing, high-volume operations&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.amazon.nova-micro-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Amazon Nova&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.035/$0.14&lt;/td&gt; 
   &lt;td&gt;Ultra-low latency, real-time monitoring&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-opus-4-8&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$5.00/$25.00&lt;/td&gt; 
   &lt;td&gt;Flagship coding/agents/deep reasoning; adaptive thinking only (sampling params rejected)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-opus-4-7&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$5.00/$25.00&lt;/td&gt; 
   &lt;td&gt;Advanced engineering, long-running agents; adaptive thinking only&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-opus-4-6-v1&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$5.00/$25.00&lt;/td&gt; 
   &lt;td&gt;World-class coding, enterprise agents&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-sonnet-4-6&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$3.00/$15.00&lt;/td&gt; 
   &lt;td&gt;Frontier intelligence, enterprise scale&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-opus-4-5-20251101-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$5.00/$25.00&lt;/td&gt; 
   &lt;td&gt;Multi-day software development&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-haiku-4-5-20251001-v1:0&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.00/$5.00&lt;/td&gt; 
   &lt;td&gt;Near-frontier performance, high speed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-sonnet-4-5-20250929-v1:0&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$3.00/$15.00&lt;/td&gt; 
   &lt;td&gt;Real-world agents, coding excellence&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-sonnet-4-20250514-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$3.00/$15.00&lt;/td&gt; 
   &lt;td&gt;Balanced performance, production-ready&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;us.anthropic.claude-3-5-haiku-20241022-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Anthropic&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.80/$4.00&lt;/td&gt; 
   &lt;td&gt;Fastest model, cost-effective scanning&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;cohere.command-r-plus-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Cohere&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$3.00/$15.00&lt;/td&gt; 
   &lt;td&gt;Large-scale operations, superior RAG&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;deepseek.v3.2&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;DeepSeek&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.58/$1.68&lt;/td&gt; 
   &lt;td&gt;Long-context reasoning, efficiency&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;openai.gpt-oss-120b-1:0&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;OpenAI (OSS)&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.15/$0.60&lt;/td&gt; 
   &lt;td&gt;Strong reasoning, scientific analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;openai.gpt-oss-20b-1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;OpenAI (OSS)&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.07/$0.30&lt;/td&gt; 
   &lt;td&gt;Efficient coding, software development&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen.qwen3-next-80b-a3b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Qwen&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.15/$1.20&lt;/td&gt; 
   &lt;td&gt;Ultra-long context, flagship reasoning&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen.qwen3-32b-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Qwen&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.15/$0.60&lt;/td&gt; 
   &lt;td&gt;Balanced reasoning, research use cases&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen.qwen3-coder-30b-a3b-v1:0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Qwen&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.15/$0.60&lt;/td&gt; 
   &lt;td&gt;Vibe coding, natural-language first&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen.qwen3-coder-next&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Qwen&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;$0.45/$1.80&lt;/td&gt; 
   &lt;td&gt;Tool use, function calling optimized&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;mistral.mistral-large-3-675b-instruct&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Mistral&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$4.00/$12.00&lt;/td&gt; 
   &lt;td&gt;Advanced multimodal, long-context&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshotai.kimi-k2.5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Moonshot&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.60/$3.00&lt;/td&gt; 
   &lt;td&gt;Vision, language, code in one model&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Prices&lt;/strong&gt;: Per 1M tokens. Models with thinking/reasoning support additional compute costs during reasoning phase.&lt;/p&gt; 
&lt;h4&gt;Tested but Incompatible Models&lt;/h4&gt; 
&lt;p&gt;Some AWS Bedrock models were tested but are &lt;strong&gt;not supported&lt;/strong&gt; due to technical limitations:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model Family&lt;/th&gt; 
   &lt;th&gt;Reason for Incompatibility&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;GLM (&lt;a href=&quot;http://Z.AI&quot;&gt;Z.AI&lt;/a&gt;)&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Tool calling format incompatible with Converse API (expects string instead of JSON)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;AI21 Jamba&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Severe rate limits (1-2 req/min) prevent reliable testing and production use&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Meta Llama 3.3/3.1&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Unstable tool call result processing, causes unexpected failures in multi-turn workflows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Mistral Magistral&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Tool calling not supported by the model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Moonshot K2-Thinking&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Unstable streaming behavior with tool calls, unreliable in production&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Qwen3-VL&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Unstable streaming with tool calling, multimodal + tools combination fails intermittently&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Rate Limits &amp;amp; Quota Management&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;Default AWS Bedrock quotas for Claude models are &lt;strong&gt;extremely restrictive&lt;/strong&gt; (2-20 requests/minute for new accounts). For production penetration testing:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;strong&gt;Request quota increases&lt;/strong&gt; through AWS Service Quotas console for models you plan to use&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Use Amazon Nova models&lt;/strong&gt; - higher default quotas and excellent performance&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Enable provisioned throughput&lt;/strong&gt; for consistent high-volume testing&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Monitor usage&lt;/strong&gt; - AWS throttles aggressively at quota limits&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;Without quota increases, expect frequent delays and workflow interruptions.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Converse API Requirements&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;PentAGI uses Amazon Bedrock &lt;strong&gt;Converse API&lt;/strong&gt; for unified model access. All supported models require:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;✅ Converse/ConverseStream API support&lt;/li&gt; 
  &lt;li&gt;✅ Tool use (function calling) for penetration testing workflows&lt;/li&gt; 
  &lt;li&gt;✅ Streaming tool use for real-time feedback&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;Verify model capabilities at: &lt;a href=&quot;https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-supported-models-features.html&quot;&gt;AWS Bedrock Model Features&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Automatic Prompt Caching&lt;/strong&gt;: 40-70% cost reduction on repeated context (Claude 4.x models)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Extended Thinking&lt;/strong&gt;: Step-by-step reasoning for complex security analysis (Claude, DeepSeek R1, OpenAI GPT)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multimodal Analysis&lt;/strong&gt;: Process screenshots, diagrams, video for comprehensive testing (Nova, Claude, Mistral, Kimi)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tool Calling&lt;/strong&gt;: Seamless integration with 20+ pentesting tools via function calling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Streaming&lt;/strong&gt;: Real-time response streaming for interactive security assessment workflows&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;DeepSeek Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with DeepSeek, providing access to advanced AI models with strong reasoning, coding capabilities, and context caching at competitive prices.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default Value&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DEEPSEEK_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;DeepSeek API key for authentication&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DEEPSEEK_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://api.deepseek.com&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;DeepSeek API endpoint URL&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DEEPSEEK_PROVIDER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Provider prefix for LiteLLM integration (optional)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Direct API usage
DEEPSEEK_API_KEY=your_deepseek_api_key
DEEPSEEK_SERVER_URL=https://api.deepseek.com

# With LiteLLM proxy
DEEPSEEK_API_KEY=your_litellm_key
DEEPSEEK_SERVER_URL=http://litellm-proxy:4000
DEEPSEEK_PROVIDER=deepseek  # Adds prefix to model names (deepseek/deepseek-v4-flash) for LiteLLM
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI supports 2 DeepSeek V4 models with tool calling, streaming, hybrid thinking/non-thinking modes, and context caching. Both models support thinking mode by default and can be switched to non-thinking mode via &lt;code&gt;extra_body&lt;/code&gt;. Models marked with &lt;code&gt;*&lt;/code&gt; are used in default configuration.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-flash&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ hybrid&lt;/td&gt; 
   &lt;td&gt;384K&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$0.14/$0.28/$0.0028&lt;/td&gt; 
   &lt;td&gt;Utility agents, general dialogue, fast tool calling&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ hybrid&lt;/td&gt; 
   &lt;td&gt;384K&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$1.74/$3.48/$0.0145&lt;/td&gt; 
   &lt;td&gt;Advanced reasoning, complex logic, security analysis&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Prices&lt;/strong&gt;: Per 1M tokens. Cache pricing applies to prompt tokens served from cache (input cache hit, reduced to 1/10 of launch price since 2026-04-26). Both models support hybrid thinking — &lt;code&gt;thinking&lt;/code&gt; mode is enabled by default; pass &lt;code&gt;extra_body.thinking.type: disabled&lt;/code&gt; to switch to non-thinking mode for faster/cheaper responses.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Pricing Note (deepseek-v4-pro)&lt;/strong&gt;: The 75% promotional discount on &lt;code&gt;deepseek-v4-pro&lt;/code&gt; officially ended on 2026-05-31 15:59 UTC. The prices above reflect the standard post-promotional pricing. If you have legacy configurations using the discounted prices ($0.435/$0.87/$0.003625), update them to the current rates for accurate cost tracking.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;The legacy model names &lt;code&gt;deepseek-chat&lt;/code&gt; and &lt;code&gt;deepseek-reasoner&lt;/code&gt; are scheduled for deprecation by DeepSeek on 2026-07-24. Existing user configurations referencing the legacy names continue to work until then; the defaults above use the current V4 names. &lt;code&gt;deepseek-chat&lt;/code&gt; maps to &lt;code&gt;deepseek-v4-flash&lt;/code&gt; non-thinking mode; &lt;code&gt;deepseek-reasoner&lt;/code&gt; maps to &lt;code&gt;deepseek-v4-flash&lt;/code&gt; thinking mode.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Default Agent Configuration&lt;/strong&gt;:&lt;/p&gt; 
&lt;p&gt;Strategy: prefer &lt;code&gt;deepseek-v4-flash&lt;/code&gt; (12x cheaper input, 12x cheaper output) as the workhorse for utility/lightweight agents; reserve &lt;code&gt;deepseek-v4-pro&lt;/code&gt; for complex multi-step reasoning. The &lt;code&gt;installer&lt;/code&gt; agent runs on Flash with thinking enabled because environment setup tasks (shell commands, config edits) rarely require pro-level reasoning. Run A/B tests on your own workloads before promoting more agents to Pro.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Agent Role&lt;/th&gt; 
   &lt;th&gt;Default Model&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Reasoning Effort&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
   &lt;th&gt;Temperature&lt;/th&gt; 
   &lt;th&gt;Top P&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Generator / Refiner&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;High&lt;/td&gt; 
   &lt;td&gt;32768&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Coder&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;High&lt;/td&gt; 
   &lt;td&gt;20480&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Primary Agent / Assistant / Pentester&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;High&lt;/td&gt; 
   &lt;td&gt;16384&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Adviser (mentor/planner)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;High&lt;/td&gt; 
   &lt;td&gt;8192&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Installer&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;High&lt;/td&gt; 
   &lt;td&gt;12288&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
   &lt;td&gt;(auto)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Reflector / Searcher / Enricher&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Disabled&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;4096&lt;/td&gt; 
   &lt;td&gt;0.5&lt;/td&gt; 
   &lt;td&gt;0.9&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Simple / Simple JSON&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;deepseek-v4-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Disabled&lt;/td&gt; 
   &lt;td&gt;—&lt;/td&gt; 
   &lt;td&gt;2048&lt;/td&gt; 
   &lt;td&gt;0.3&lt;/td&gt; 
   &lt;td&gt;0.9&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: When thinking mode is enabled, DeepSeek silently ignores &lt;code&gt;temperature&lt;/code&gt;, &lt;code&gt;top_p&lt;/code&gt;, &lt;code&gt;presence_penalty&lt;/code&gt;, and &lt;code&gt;frequency_penalty&lt;/code&gt;. The langchaingo client automatically nullifies &lt;code&gt;temperature&lt;/code&gt;/&lt;code&gt;top_p&lt;/code&gt; when &lt;code&gt;reasoning_effort&lt;/code&gt; is set, so they appear as &quot;(auto)&quot; in the table above. All thinking-enabled agents also explicitly pass &lt;code&gt;extra_body.thinking.type: enabled&lt;/code&gt; as defensive coding against future provider default changes.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Hybrid Thinking Modes&lt;/strong&gt;: Switch between thinking (deep reasoning) and non-thinking (fast) modes via &lt;code&gt;extra_body.thinking.type&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automatic Prompt Caching&lt;/strong&gt;: Significant cost reduction on repeated context via cache-hit pricing (1/10 of launch price)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Extended Thinking&lt;/strong&gt;: Reinforcement learning CoT for complex security analysis (both V4 models)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Strong Coding&lt;/strong&gt;: Optimized for code generation and exploit development&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Long Context&lt;/strong&gt;: 1M token context window with up to 384K output tokens&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tool Calling&lt;/strong&gt;: Seamless integration with 20+ pentesting tools via function calling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Streaming&lt;/strong&gt;: Real-time response streaming for interactive workflows&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multilingual&lt;/strong&gt;: Strong Chinese and English support&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Additional Features&lt;/strong&gt;: JSON Output, Chat Prefix Completion (beta), FIM/Fill-in-the-Middle Completion (non-thinking mode only)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Concurrency Limits&lt;/strong&gt;: &lt;code&gt;deepseek-v4-flash&lt;/code&gt;: 2500 concurrent requests; &lt;code&gt;deepseek-v4-pro&lt;/code&gt;: 500 concurrent requests.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;LiteLLM Integration&lt;/strong&gt;: Set &lt;code&gt;DEEPSEEK_PROVIDER=deepseek&lt;/code&gt; to enable model name prefixing when using default PentAGI configurations with LiteLLM proxy. Leave empty for direct API usage.&lt;/p&gt; 
&lt;h3&gt;GLM Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with GLM from Zhipu AI (&lt;a href=&quot;http://Z.AI&quot;&gt;Z.AI&lt;/a&gt;), providing advanced language models with MoE architecture, strong reasoning, and agentic capabilities developed by Tsinghua University.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default Value&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GLM_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;GLM API key for authentication&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GLM_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://api.z.ai/api/paas/v4&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GLM API endpoint URL (international)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GLM_PROVIDER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Provider prefix for LiteLLM integration (optional)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Direct API usage (international endpoint)
GLM_API_KEY=your_glm_api_key
GLM_SERVER_URL=https://api.z.ai/api/paas/v4

# Alternative endpoints
GLM_SERVER_URL=https://open.bigmodel.cn/api/paas/v4  # China
GLM_SERVER_URL=https://api.z.ai/api/coding/paas/v4   # Coding-specific

# With LiteLLM proxy
GLM_API_KEY=your_litellm_key
GLM_SERVER_URL=http://litellm-proxy:4000
GLM_PROVIDER=zai  # Adds prefix to model names (zai/glm-4) for LiteLLM
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI supports 14 GLM models with tool calling, streaming, hybrid thinking modes, and prompt caching. Models marked with &lt;code&gt;*&lt;/code&gt; are used in default configuration. Thinking is controlled via &lt;code&gt;extra_body.thinking.type&lt;/code&gt; (&quot;enabled&quot;/&quot;disabled&quot;); unlike Kimi, GLM is permissive about temperature in either mode.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;GLM-5.x Series - Latest Generation (200K context, 128K max output)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-5.2&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ Hybrid&lt;/td&gt; 
   &lt;td&gt;200K&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$1.40/$4.40/$0.26&lt;/td&gt; 
   &lt;td&gt;Newest flagship, improves on GLM-5.1. Supports explicit &lt;code&gt;reasoning_effort&lt;/code&gt; (high/max) (generator/refiner/adviser/coder/pentester default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-5.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Hybrid&lt;/td&gt; 
   &lt;td&gt;200K&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$1.40/$4.40/$0.26&lt;/td&gt; 
   &lt;td&gt;Long-horizon tasks: 8h sustained autonomous execution, Claude Opus 4.6-aligned coding&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Hybrid&lt;/td&gt; 
   &lt;td&gt;200K&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$1.00/$3.20/$0.20&lt;/td&gt; 
   &lt;td&gt;Foundation for Agentic Engineering, MoE 744B/40B active, Claude Opus 4.5-level coding&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-5-turbo&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ Hybrid&lt;/td&gt; 
   &lt;td&gt;200K&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$1.20/$4.00/$0.24&lt;/td&gt; 
   &lt;td&gt;OpenClaw-native: optimized for tool invocation, persistent tasks, long-chain execution (primary_agent/assistant default)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GLM-4.7 Series - Premium with Interleaved Thinking&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.7&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Hybrid&lt;/td&gt; 
   &lt;td&gt;200K&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$0.60/$2.20/$0.11&lt;/td&gt; 
   &lt;td&gt;Enhanced programming, stable multi-step reasoning&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.7-flashx&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Hybrid&lt;/td&gt; 
   &lt;td&gt;200K&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$0.07/$0.40/$0.01&lt;/td&gt; 
   &lt;td&gt;Ultra-cheap with priority GPU, but lower RPM limits (avoid for high-frequency use)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.7-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Hybrid&lt;/td&gt; 
   &lt;td&gt;200K&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;Free/Free/Free&lt;/td&gt; 
   &lt;td&gt;Free ~30B SOTA model, 1 concurrent request&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GLM-4.6 Series - Balanced with Auto-Thinking&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.6&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Auto&lt;/td&gt; 
   &lt;td&gt;200K&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$0.60/$2.20/$0.11&lt;/td&gt; 
   &lt;td&gt;Balanced, streaming tool calls, token-efficient&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GLM-4.5 Series - Unified Reasoning/Coding/Agents&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Auto&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;96K&lt;/td&gt; 
   &lt;td&gt;$0.60/$2.20/$0.11&lt;/td&gt; 
   &lt;td&gt;Unified, MoE 355B/32B active&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.5-x&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Auto&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;96K&lt;/td&gt; 
   &lt;td&gt;$2.20/$8.90/$0.45&lt;/td&gt; 
   &lt;td&gt;Ultra-fast premium, lowest latency&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.5-air&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ Auto&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;96K&lt;/td&gt; 
   &lt;td&gt;$0.20/$1.10/$0.03&lt;/td&gt; 
   &lt;td&gt;Cost-effective MoE 106B/12B (simple/simple_json/reflector/searcher/enricher/installer default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.5-airx&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Auto&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;96K&lt;/td&gt; 
   &lt;td&gt;$1.10/$4.50/$0.22&lt;/td&gt; 
   &lt;td&gt;Accelerated Air with priority GPU&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.5-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ Auto&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;96K&lt;/td&gt; 
   &lt;td&gt;Free/Free/Free&lt;/td&gt; 
   &lt;td&gt;Free with reasoning/coding/agents support&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;GLM-4 Legacy - Dense Architecture&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;glm-4-32b-0414-128k&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;16K&lt;/td&gt; 
   &lt;td&gt;$0.10/$0.10&lt;/td&gt; 
   &lt;td&gt;Ultra-budget dense 32B, parsing without reasoning&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Prices&lt;/strong&gt;: Per 1M tokens. Cache pricing is for prompt cache hit; cache storage is currently free per &lt;a href=&quot;http://Z.AI&quot;&gt;Z.AI&lt;/a&gt; promotion. GLM-4-32B has no cache support.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Default Agent Configuration&lt;/strong&gt;:&lt;/p&gt; 
&lt;p&gt;Strategy: &lt;code&gt;glm-5.2&lt;/code&gt; (newest flagship, $1.40 input) for critical reasoning, &lt;code&gt;glm-5-turbo&lt;/code&gt; (OpenClaw-native, agent-optimized) for orchestration, &lt;code&gt;glm-4.5-air&lt;/code&gt; (cheap MoE with hybrid thinking and reliable RPM) for all utility/installer agents. &lt;code&gt;glm-4.7-flashx&lt;/code&gt; is avoided as default due to lower RPM limits causing frequent 429 errors at high frequency.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Agent Role&lt;/th&gt; 
   &lt;th&gt;Default Model&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Temperature&lt;/th&gt; 
   &lt;th&gt;Top P&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Generator / Refiner&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;glm-5.2&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;32768&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Coder&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;glm-5.2&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;20480&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Adviser / Pentester&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;glm-5.2&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;16384&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Primary Agent / Assistant&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;glm-5-turbo&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;16384&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Installer&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.5-air&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;16384&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Simple / Reflector&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.5-air&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Disabled&lt;/td&gt; 
   &lt;td&gt;0.6&lt;/td&gt; 
   &lt;td&gt;0.9&lt;/td&gt; 
   &lt;td&gt;8192&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Searcher / Enricher / Simple JSON&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;glm-4.5-air&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Disabled&lt;/td&gt; 
   &lt;td&gt;0.6&lt;/td&gt; 
   &lt;td&gt;0.9&lt;/td&gt; 
   &lt;td&gt;4096&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Generator, refiner, and adviser additionally set &lt;code&gt;reasoning.effort: max&lt;/code&gt;, which layers &lt;code&gt;llms.WithReasoning(ReasoningMax, 0)&lt;/code&gt; on top of &lt;code&gt;extra_body.thinking.type=enabled&lt;/code&gt; — this &lt;code&gt;reasoning_effort&lt;/code&gt; parameter is only supported by &lt;code&gt;glm-5.2&lt;/code&gt;.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note on temperature&lt;/strong&gt;: GLM accepts both &lt;code&gt;1.0&lt;/code&gt; and &lt;code&gt;0.6&lt;/code&gt; in either thinking/non-thinking mode (per &lt;a href=&quot;http://Z.AI&quot;&gt;Z.AI&lt;/a&gt; docs). langchaingo&#39;s &lt;code&gt;IsReasoningModel&lt;/code&gt; matches &lt;code&gt;glm-4.5*&lt;/code&gt;/&lt;code&gt;glm-4.6*&lt;/code&gt;/&lt;code&gt;glm-4.7*&lt;/code&gt; prefixes and force-overrides temperature to 1.0 in &lt;code&gt;createChatRequest&lt;/code&gt; — this is harmless for GLM (unlike Kimi) but means temperature values for those models in YAML are advisory. &lt;code&gt;glm-5&lt;/code&gt;/&lt;code&gt;glm-5.1&lt;/code&gt;/&lt;code&gt;glm-5.2&lt;/code&gt;/&lt;code&gt;glm-5-turbo&lt;/code&gt; are not matched, so explicit values pass through unchanged.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Thinking Modes&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Hybrid&lt;/strong&gt; (GLM-5.x, GLM-4.7): Explicit toggle via &lt;code&gt;extra_body.thinking.type&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Auto&lt;/strong&gt; (GLM-4.6, GLM-4.5 series): Model automatically determines when reasoning is needed&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reasoning Effort&lt;/strong&gt; (GLM-5.2 only): supports an explicit &lt;code&gt;reasoning_effort&lt;/code&gt; parameter (&lt;code&gt;high&lt;/code&gt;/&lt;code&gt;max&lt;/code&gt;) on top of hybrid thinking, for finer control over reasoning depth than the other GLM-5.x models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Preserved Thinking&lt;/strong&gt; (&lt;a href=&quot;http://Z.AI&quot;&gt;Z.AI&lt;/a&gt; Coding capability): all thinking-enabled agents in PentAGI also pass &lt;code&gt;extra_body.thinking.clear_thinking: false&lt;/code&gt; so that &lt;code&gt;reasoning_content&lt;/code&gt; from previous assistant turns is retained across the conversation. This is required on the standard API endpoint (&lt;code&gt;/api/paas/v4&lt;/code&gt;) — on the Coding Plan endpoint it would be enabled by default. Improves reasoning continuity and cache hit rates in multi-turn tool call chains.&lt;/li&gt; 
 &lt;li&gt;All thinking-enabled agents also pass &lt;code&gt;extra_body.tool_choice: auto&lt;/code&gt; defensively&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Long-Horizon Tasks&lt;/strong&gt;: GLM-5.1 supports 8-hour sustained autonomous execution, ideal for complex multi-stage agentic workflows&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;OpenClaw-Native Orchestration&lt;/strong&gt;: GLM-5-Turbo is specifically optimized for tool invocation, instruction following, and long-chain execution&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Prompt Caching&lt;/strong&gt;: Significant cost reduction on repeated context (cached input pricing shown)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Ultra-Long Context&lt;/strong&gt;: 200K tokens for GLM-5.x/4.7/4.6 series&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MoE Architecture&lt;/strong&gt;: Efficient 744B/40B active (GLM-5/5.1), 355B/32B (GLM-4.5), 106B/12B (GLM-4.5-Air)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tool Calling&lt;/strong&gt;: Seamless integration with 20+ pentesting tools via function calling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Streaming&lt;/strong&gt;: Real-time streaming with streaming tool calls support (GLM-4.6+)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multilingual&lt;/strong&gt;: Exceptional Chinese and English NLP capabilities&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Free Options&lt;/strong&gt;: GLM-4.7-Flash and GLM-4.5-Flash for prototyping and experimentation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;LiteLLM Integration&lt;/strong&gt;: Set &lt;code&gt;GLM_PROVIDER=zai&lt;/code&gt; to enable model name prefixing when using default PentAGI configurations with LiteLLM proxy. Leave empty for direct API usage.&lt;/p&gt; 
&lt;h3&gt;Kimi Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with Kimi from Moonshot AI, providing ultra-long context models with multimodal capabilities perfect for analyzing extensive codebases and documentation.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default Value&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;KIMI_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Kimi API key for authentication&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;KIMI_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://api.moonshot.ai/v1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Kimi API endpoint URL (international)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;KIMI_PROVIDER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Provider prefix for LiteLLM integration (optional)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Direct API usage (international endpoint)
KIMI_API_KEY=your_kimi_api_key
KIMI_SERVER_URL=https://api.moonshot.ai/v1

# Alternative endpoint
KIMI_SERVER_URL=https://api.moonshot.cn/v1  # China

# With LiteLLM proxy
KIMI_API_KEY=your_litellm_key
KIMI_SERVER_URL=http://litellm-proxy:4000
KIMI_PROVIDER=moonshot  # Adds prefix to model names (moonshot/kimi-k2.5) for LiteLLM
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI supports 11 Kimi/Moonshot models with tool calling, streaming, hybrid thinking modes, and multimodal capabilities (text/image/video for K2.x). All &lt;code&gt;kimi-k2-*&lt;/code&gt; legacy models (turbo-preview, 0905-preview, 0711-preview, thinking, thinking-turbo) were deprecated by Moonshot on 2026-05-25 and are NOT included. Models marked with &lt;code&gt;*&lt;/code&gt; are used in default configuration.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Kimi K3 - Flagship (Always Reasoning)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Multimodal&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input Miss / Output / Cache Hit)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k3&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ always&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;1M&lt;/td&gt; 
   &lt;td&gt;$3.00 / $15.00 / $0.30&lt;/td&gt; 
   &lt;td&gt;Flagship for long-horizon coding and end-to-end knowledge work. Always reasons — no &lt;code&gt;thinking&lt;/code&gt; toggle, depth set via top-level &lt;code&gt;reasoning_effort&lt;/code&gt; (currently &lt;code&gt;max&lt;/code&gt; only) (generator/refiner/adviser default)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Kimi K2.7 Code Series - Coding-Focused&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Multimodal&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input Miss / Output / Cache Hit)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.7-code&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ hybrid&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;256K&lt;/td&gt; 
   &lt;td&gt;$0.95 / $4.00 / $0.19&lt;/td&gt; 
   &lt;td&gt;Coding-focused, higher success rates on long-context programming tasks (coder/pentester default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.7-code-highspeed&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ hybrid&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;256K&lt;/td&gt; 
   &lt;td&gt;$1.90 / $8.00 / $0.38&lt;/td&gt; 
   &lt;td&gt;Same model as &lt;code&gt;kimi-k2.7-code&lt;/code&gt; with higher output throughput (~180-260 tokens/s) (primary_agent/assistant default)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Kimi K2.x Series - Multimodal Flagship&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Multimodal&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input Miss / Output / Cache Hit)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.6&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅ hybrid&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;256K&lt;/td&gt; 
   &lt;td&gt;$0.95 / $4.00 / $0.16&lt;/td&gt; 
   &lt;td&gt;Latest multimodal flagship: native architecture, stronger code, improved instruction compliance (not used by default config)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.5&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅ hybrid&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;256K&lt;/td&gt; 
   &lt;td&gt;$0.60 / $3.00 / $0.10&lt;/td&gt; 
   &lt;td&gt;Previous-gen: 36% cheaper input than K2.6 (simple/simple_json/reflector/searcher/enricher/installer default)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Moonshot V1 Series - Generation Models (Flexible Parameters)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Multimodal&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input / Output)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshot-v1-8k&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;8K&lt;/td&gt; 
   &lt;td&gt;$0.20 / $2.00&lt;/td&gt; 
   &lt;td&gt;Short text generation, ultra-cheap&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshot-v1-32k&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;32K&lt;/td&gt; 
   &lt;td&gt;$1.00 / $3.00&lt;/td&gt; 
   &lt;td&gt;Long text generation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshot-v1-128k&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$2.00 / $5.00&lt;/td&gt; 
   &lt;td&gt;Very long context&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Moonshot V1 Vision Series - Image Understanding&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Multimodal&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input / Output)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshot-v1-8k-vision-preview&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;8K&lt;/td&gt; 
   &lt;td&gt;$0.20 / $2.00&lt;/td&gt; 
   &lt;td&gt;Vision + short context&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshot-v1-32k-vision-preview&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;32K&lt;/td&gt; 
   &lt;td&gt;$1.00 / $3.00&lt;/td&gt; 
   &lt;td&gt;Vision + medium context&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;moonshot-v1-128k-vision-preview&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;128K&lt;/td&gt; 
   &lt;td&gt;$2.00 / $5.00&lt;/td&gt; 
   &lt;td&gt;Vision + long context&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Prices&lt;/strong&gt;: Per 1M tokens. Cache pricing applies to prompt tokens served from automatic context cache (only Kimi K3/K2.7/K2.x models support cache).&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;CRITICAL — Kimi parameter constraints per model family&lt;/strong&gt;: API returns &lt;code&gt;invalid_request_error&lt;/code&gt; for any deviation:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;kimi-k3&lt;/code&gt;: always reasons, no &lt;code&gt;thinking&lt;/code&gt; param at all; reasoning depth is set via the top-level &lt;code&gt;reasoning_effort&lt;/code&gt; field (&lt;code&gt;low&lt;/code&gt;/&lt;code&gt;high&lt;/code&gt;/&lt;code&gt;max&lt;/code&gt;, default &lt;code&gt;max&lt;/code&gt;) — PentAGI pins it to &lt;code&gt;max&lt;/code&gt; for all agents using this model. &lt;code&gt;temperature&lt;/code&gt; MUST be &lt;code&gt;1.0&lt;/code&gt;, &lt;code&gt;top_p&lt;/code&gt; MUST be &lt;code&gt;0.95&lt;/code&gt;, &lt;code&gt;n&lt;/code&gt; MUST be &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;presence_penalty&lt;/code&gt;/&lt;code&gt;frequency_penalty&lt;/code&gt; MUST be &lt;code&gt;0&lt;/code&gt;. Do not switch effort per call — it invalidates the prefix cache.&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kimi-k2.7-code&lt;/code&gt; / &lt;code&gt;kimi-k2.7-code-highspeed&lt;/code&gt;: &lt;code&gt;thinking&lt;/code&gt; may be omitted; if set explicitly, only &lt;code&gt;{&quot;type&quot;:&quot;enabled&quot;,&quot;keep&quot;:&quot;all&quot;}&lt;/code&gt; is accepted (&lt;code&gt;type: disabled&lt;/code&gt; is rejected). &lt;code&gt;reasoning_effort&lt;/code&gt; is not supported. &lt;code&gt;temperature&lt;/code&gt; MUST be &lt;code&gt;1.0&lt;/code&gt;, &lt;code&gt;top_p&lt;/code&gt; MUST be &lt;code&gt;0.95&lt;/code&gt;, &lt;code&gt;n&lt;/code&gt; MUST be &lt;code&gt;1&lt;/code&gt;; &lt;code&gt;tool_choice: required&lt;/code&gt; is not supported (use &lt;code&gt;auto&lt;/code&gt;).&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kimi-k2.6&lt;/code&gt;: thinking mode needs &lt;code&gt;temperature=1.0&lt;/code&gt;, &lt;code&gt;top_p=0.95&lt;/code&gt;, &lt;code&gt;n=1&lt;/code&gt;, &lt;code&gt;thinking.keep=&quot;all&quot;&lt;/code&gt;; non-thinking mode needs &lt;code&gt;temperature=0.6&lt;/code&gt;, &lt;code&gt;top_p=0.95&lt;/code&gt;, &lt;code&gt;n=1&lt;/code&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kimi-k2.5&lt;/code&gt;: thinking mode needs &lt;code&gt;temperature=1.0&lt;/code&gt;, &lt;code&gt;top_p=0.95&lt;/code&gt;, &lt;code&gt;n=1&lt;/code&gt; (no &lt;code&gt;keep&lt;/code&gt; support); non-thinking mode needs &lt;code&gt;temperature=0.6&lt;/code&gt;, &lt;code&gt;top_p=0.95&lt;/code&gt;, &lt;code&gt;n=1&lt;/code&gt;.&lt;/li&gt; 
  &lt;li&gt;All Kimi models: &lt;code&gt;presence_penalty=0&lt;/code&gt;, &lt;code&gt;frequency_penalty=0&lt;/code&gt;, &lt;code&gt;tool_choice&lt;/code&gt; in &lt;code&gt;{auto, none}&lt;/code&gt;.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;Moonshot V1 models use standard OpenAI-compatible parameters with no such constraints.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Default Agent Configuration&lt;/strong&gt;:&lt;/p&gt; 
&lt;p&gt;Strategy: &lt;code&gt;kimi-k2.5&lt;/code&gt; for utility/orchestration, &lt;code&gt;kimi-k2.7-code-highspeed&lt;/code&gt; for the primary/assistant loop, &lt;code&gt;kimi-k3&lt;/code&gt; (always-thinking flagship) for critical reasoning (generator/refiner/adviser), &lt;code&gt;kimi-k2.7-code&lt;/code&gt; for coder/pentester. &lt;code&gt;kimi-k2.6&lt;/code&gt; is not used in the default configuration. All &lt;code&gt;kimi-k2.x&lt;/code&gt;/&lt;code&gt;k2.7&lt;/code&gt; agents are configured with the API-required fixed parameters (temp/top_p/n) and explicit &lt;code&gt;extra_body.thinking.type&lt;/code&gt;. For thinking-enabled agents, &lt;code&gt;extra_body.thinking.keep: &quot;all&quot;&lt;/code&gt; is set (where supported) to preserve historical &lt;code&gt;reasoning_content&lt;/code&gt; in multi-turn tool call chains (without it Moonshot returns &quot;thinking is enabled but reasoning_content is missing&quot;).&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Agent Role&lt;/th&gt; 
   &lt;th&gt;Default Model&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Temperature&lt;/th&gt; 
   &lt;th&gt;Top P&lt;/th&gt; 
   &lt;th&gt;Max Output&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Generator / Refiner&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k3&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Always (effort=max)&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;32768&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Adviser (mentor/planner)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k3&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Always (effort=max)&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;8192&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Coder&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.7-code&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled (keep=all)&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;20480&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pentester&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.7-code&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled (keep=all)&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;16384&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Primary Agent / Assistant&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.7-code-highspeed&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled (keep=all)&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;16384&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Installer&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enabled&lt;/td&gt; 
   &lt;td&gt;1.0&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;16384&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Reflector / Searcher / Enricher&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Disabled&lt;/td&gt; 
   &lt;td&gt;0.6&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;4096&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Simple&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Disabled&lt;/td&gt; 
   &lt;td&gt;0.6&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;8192&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Simple JSON&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;kimi-k2.5&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Disabled&lt;/td&gt; 
   &lt;td&gt;0.6&lt;/td&gt; 
   &lt;td&gt;0.95&lt;/td&gt; 
   &lt;td&gt;4096&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: for &lt;code&gt;kimi-k2.5&lt;/code&gt; non-thinking agents, PentAGI also duplicates &lt;code&gt;temperature: 0.6&lt;/code&gt; into &lt;code&gt;extra_body&lt;/code&gt; as a workaround — langchaingo&#39;s &lt;code&gt;IsReasoningModel&lt;/code&gt; matches the substring &lt;code&gt;2.5&lt;/code&gt; and force-overrides temperature to &lt;code&gt;1.0&lt;/code&gt;, and &lt;code&gt;extra_body&lt;/code&gt; bypasses that override.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Always-On Reasoning Flagship&lt;/strong&gt;: &lt;code&gt;kimi-k3&lt;/code&gt; never disables thinking and offers a 1M token context for the most demanding long-horizon coding and knowledge work&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Ultra-Long Context&lt;/strong&gt;: Up to 256K tokens (K2.7/K2.x) or 1M tokens (K3) for comprehensive codebase/documentation analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Native Multimodal&lt;/strong&gt;: K2.7/K2.6/K2.5 support text + image + video input out of the box&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Hybrid Thinking&lt;/strong&gt;: K2.7/K2.6/K2.5 toggle between thinking and non-thinking via &lt;code&gt;extra_body.thinking.type&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Preserved Thinking&lt;/strong&gt; (K2.7, K2.6): &lt;code&gt;thinking.keep: &quot;all&quot;&lt;/code&gt; preserves historical &lt;code&gt;reasoning_content&lt;/code&gt; across turns — required for multi-turn tool call chains&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automatic Context Caching&lt;/strong&gt;: K3/K2.7/K2.x models cache repeated prefixes&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tool Calling&lt;/strong&gt;: Full function-calling support for K3, K2.7, K2.x, and Moonshot V1&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Coding-Optimized Variants&lt;/strong&gt;: &lt;code&gt;kimi-k2.7-code&lt;/code&gt;/&lt;code&gt;kimi-k2.7-code-highspeed&lt;/code&gt; target higher success rates on long-context programming tasks, with the highspeed variant tuned for throughput&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multilingual&lt;/strong&gt;: Strong Chinese, English, and multi-language support&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Multi-turn with thinking + tool calls&lt;/strong&gt;: PentAGI&#39;s universal reasoning preservation pattern (&lt;code&gt;TextPartWithReasoning&lt;/code&gt; + &lt;code&gt;WithPreserveReasoningContent&lt;/code&gt;) automatically ensures &lt;code&gt;reasoning_content&lt;/code&gt; is sent back in the required TextContent → ToolCall order, satisfying Moonshot&#39;s &quot;thinking is enabled but reasoning_content is missing in assistant tool call message&quot; requirement.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;LiteLLM Integration&lt;/strong&gt;: Set &lt;code&gt;KIMI_PROVIDER=moonshot&lt;/code&gt; to enable model name prefixing when using default PentAGI configurations with LiteLLM proxy. Leave empty for direct API usage.&lt;/p&gt; 
&lt;h3&gt;Qwen Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with Qwen from Alibaba Cloud Model Studio (DashScope), providing powerful multilingual models with reasoning capabilities and context caching support.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default Value&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;QWEN_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Qwen API key for authentication&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;QWEN_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://dashscope-us.aliyuncs.com/compatible-mode/v1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Qwen API endpoint URL (international)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;QWEN_PROVIDER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Provider prefix for LiteLLM integration (optional)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Direct API usage (Global/US endpoint)
QWEN_API_KEY=your_qwen_api_key
QWEN_SERVER_URL=https://dashscope-us.aliyuncs.com/compatible-mode/v1

# Alternative endpoints
QWEN_SERVER_URL=https://dashscope-intl.aliyuncs.com/compatible-mode/v1  # International (Singapore)
QWEN_SERVER_URL=https://dashscope.aliyuncs.com/compatible-mode/v1       # Chinese Mainland (Beijing)

# With LiteLLM proxy
QWEN_API_KEY=your_litellm_key
QWEN_SERVER_URL=http://litellm-proxy:4000
QWEN_PROVIDER=dashscope  # Adds prefix to model names (dashscope/qwen-plus) for LiteLLM
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI supports 33 Qwen models curated for agent workflows: text reasoning, code generation, and vision-language (browser screenshots). All models are non-snapshot main aliases with tool calling, streaming, thinking modes, and context caching. Models marked with &lt;code&gt;*&lt;/code&gt; are used in default configuration.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Flagship Models (Top-tier Reasoning)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.7-max&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$2.50/$7.50/$0.50&lt;/td&gt; 
   &lt;td&gt;Next-gen flagship for agent-centric era (generator/refiner/adviser default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.6-max-preview&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.30/$7.80/$0.13&lt;/td&gt; 
   &lt;td&gt;Preview Max with enhanced vibe coding &amp;amp; front-end skills&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-max&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.20/$6.00/$0.24&lt;/td&gt; 
   &lt;td&gt;Previous-gen flagship with agent programming upgrades&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen-plus&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.40/$4.00/$0.08&lt;/td&gt; 
   &lt;td&gt;Qwen3-backbone Plus with switchable thinking modes&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Balanced Plus Models (Mid-tier)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.6-plus&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.50/$3.00/$0.05&lt;/td&gt; 
   &lt;td&gt;Native VL Plus with agentic coding (primary/assistant/pentester default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.5-plus&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.40/$2.40/$0.04&lt;/td&gt; 
   &lt;td&gt;Previous-gen native VL with strong multimodal capabilities&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Fast Flash Models (Cost-optimized)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.6-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.25/$1.50/$0.025&lt;/td&gt; 
   &lt;td&gt;Latest Flash with significant agentic-coding boost&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.5-flash&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.10/$0.40/$0.01&lt;/td&gt; 
   &lt;td&gt;Ultra-fast lightweight (simple/reflector/searcher/enricher default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.05/$0.40/$0.01&lt;/td&gt; 
   &lt;td&gt;Qwen3-series Flash with 1M context, tiered pricing&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Code-Specialized Models&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-coder-plus&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.00/$5.00/$0.20&lt;/td&gt; 
   &lt;td&gt;Strong coding agent with autonomous programming (coder default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-coder-flash&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.30/$1.50/$0.06&lt;/td&gt; 
   &lt;td&gt;Fast code-gen with multi-turn tool stability (installer default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-coder-next&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.30/$1.50/—&lt;/td&gt; 
   &lt;td&gt;Open-source code generation, SOTA at same scale&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Vision-Language Models (Browser &amp;amp; Screenshot Analysis)&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-vl-plus&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.20/$1.60/$0.04&lt;/td&gt; 
   &lt;td&gt;VL with visual agent capabilities, ultra-long video understanding&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-vl-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.05/$0.40/$0.01&lt;/td&gt; 
   &lt;td&gt;Small VL with 2D/3D localization for browser triage&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qvq-max&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.20/$4.80/—&lt;/td&gt; 
   &lt;td&gt;Visual reasoning with chain-of-thought&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Open-Source Qwen3.6 Series&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.6-27b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.60/$3.60/—&lt;/td&gt; 
   &lt;td&gt;Native VL on hybrid architecture, on-premises ready&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.6-35b-a3b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.25/$1.49/—&lt;/td&gt; 
   &lt;td&gt;Efficient 35B MoE (~3B active) for continuous monitoring&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Open-Source Qwen3.5 Series&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.5-397b-a17b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.60/$3.60/—&lt;/td&gt; 
   &lt;td&gt;Largest 397B params (~17B active), exceptional reasoning&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.5-122b-a10b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.40/$3.20/—&lt;/td&gt; 
   &lt;td&gt;Large 122B params (~10B active), strong balance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.5-35b-a3b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.25/$2.00/—&lt;/td&gt; 
   &lt;td&gt;Efficient 35B MoE (~3B active), cost-effective&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.5-27b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.30/$2.40/—&lt;/td&gt; 
   &lt;td&gt;Medium 27B with hybrid linear attention + sparse MoE&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Open-Source Qwen3 Coder Series&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-coder-480b-a35b-instruct&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$1.50/$7.50/—&lt;/td&gt; 
   &lt;td&gt;Largest open coder MoE (480B/~35B active)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-coder-30b-a3b-instruct&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.45/$2.25/—&lt;/td&gt; 
   &lt;td&gt;Efficient 30B MoE (~3B active), repository-scale&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Open-Source Qwen3 Dense &amp;amp; MoE Series&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Thinking&lt;/th&gt; 
   &lt;th&gt;Intl&lt;/th&gt; 
   &lt;th&gt;Global/US&lt;/th&gt; 
   &lt;th&gt;China&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output/Cache)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-next-80b-a3b-thinking&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.15/$1.20/—&lt;/td&gt; 
   &lt;td&gt;Next-gen 80B MoE (~3B active) thinking-only&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-next-80b-a3b-instruct&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.15/$1.20/—&lt;/td&gt; 
   &lt;td&gt;Next-gen 80B MoE instruction-following&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-235b-a22b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.70/$8.40/—&lt;/td&gt; 
   &lt;td&gt;Dual-mode 235B MoE (~22B active)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-32b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.16/$0.64/—&lt;/td&gt; 
   &lt;td&gt;Versatile 32B dense dual-mode&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-30b-a3b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.20/$2.40/—&lt;/td&gt; 
   &lt;td&gt;Efficient 30B MoE (~3B active)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-14b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.35/$4.20/—&lt;/td&gt; 
   &lt;td&gt;Medium 14B dense performance-cost balance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-8b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.18/$2.10/—&lt;/td&gt; 
   &lt;td&gt;Compact 8B dense efficiency&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-4b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.11/$1.26/—&lt;/td&gt; 
   &lt;td&gt;Lightweight 4B dense for simple tasks&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-1.7b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.11/$1.26/—&lt;/td&gt; 
   &lt;td&gt;Ultra-compact 1.7B basic checks&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-0.6b&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;$0.11/$1.26/—&lt;/td&gt; 
   &lt;td&gt;Smallest 0.6B for edge monitoring&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Prices&lt;/strong&gt;: Per 1M tokens. Cache pricing reflects implicit cache hit (when available); MoE/dense open-source models do not expose cache pricing. Tiered models (Max/Plus) show lowest-tier pricing (typically ≤32k or ≤256k input); larger contexts incur higher rates per Alibaba Cloud pricing.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Region Availability&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Intl&lt;/strong&gt; (International): Singapore region (&lt;code&gt;dashscope-intl.aliyuncs.com&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Global/US&lt;/strong&gt;: US Virginia region (&lt;code&gt;dashscope-us.aliyuncs.com&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;China&lt;/strong&gt;: Chinese Mainland Beijing region (&lt;code&gt;dashscope.aliyuncs.com&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Default Agent Configuration&lt;/strong&gt;:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Agent Role&lt;/th&gt; 
   &lt;th&gt;Default Model&lt;/th&gt; 
   &lt;th&gt;Tier&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Generator / Refiner / Adviser (planning, mentor)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.7-max&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Flagship&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Primary / Assistant / Pentester&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.6-plus&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Balanced&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Coder (exploit development)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-coder-plus&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Code+&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Installer (env setup)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;qwen3-coder-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Code Fast&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Simple / Reflector / Searcher / Enricher&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;qwen3.5-flash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Fast&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Agent-Centric Design&lt;/strong&gt;: Qwen3.7-Max is purpose-built for long-horizon autonomous execution and tool invocation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automatic Context Caching&lt;/strong&gt;: 30-50% cost reduction on repeated context with implicit cache&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Extended Thinking&lt;/strong&gt;: Chain-of-thought reasoning for complex security analysis (Qwen3.7/3.6/3.5/3-Max, QVQ-Max)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Code Specialization&lt;/strong&gt;: Qwen3-Coder series with multi-turn tool interaction and repository-level understanding&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Vision-Language&lt;/strong&gt;: Qwen3-VL series for browser screenshot triage, 2D/3D localization, OCR-level analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tool Calling&lt;/strong&gt;: Seamless integration with 20+ pentesting tools via function calling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Streaming&lt;/strong&gt;: Real-time response streaming for interactive workflows&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multilingual&lt;/strong&gt;: Strong Chinese, English, and multi-language support&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Open-Source Variants&lt;/strong&gt;: Dense and MoE models from 0.6B to 480B for on-premises/air-gapped deployments&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;LiteLLM Integration&lt;/strong&gt;: Set &lt;code&gt;QWEN_PROVIDER=dashscope&lt;/code&gt; to enable model name prefixing when using default PentAGI configurations with LiteLLM proxy. Leave empty for direct API usage.&lt;/p&gt; 
&lt;h4&gt;Alternative Integrations&lt;/h4&gt; 
&lt;p&gt;DashScope is fully OpenAI-compatible, so Qwen can also power two other PentAGI subsystems through the standard OpenAI client.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;As embedding provider&lt;/strong&gt; (&lt;code&gt;text-embedding-v4&lt;/code&gt;, see &lt;a href=&quot;https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=doc#/doc/?type=model&amp;amp;url=prices&quot;&gt;Alibaba Cloud Model Studio pricing&lt;/a&gt;):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;EMBEDDING_PROVIDER=openai
EMBEDDING_URL=https://dashscope-intl.aliyuncs.com/compatible-mode/v1  # International (Singapore)
# EMBEDDING_URL=https://dashscope.aliyuncs.com/compatible-mode/v1     # Chinese Mainland
EMBEDDING_KEY=sk-*******
EMBEDDING_MODEL=text-embedding-v4
EMBEDDING_BATCH_SIZE=         # optional, default applies
EMBEDDING_STRIP_NEW_LINES=    # optional, default applies
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Note: the Global/US DashScope endpoint (&lt;code&gt;dashscope-us.aliyuncs.com&lt;/code&gt;) does &lt;strong&gt;not&lt;/strong&gt; expose embedding APIs — use the International or China endpoints for &lt;code&gt;text-embedding-v4&lt;/code&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;As OpenAI-typed custom LLM provider&lt;/strong&gt;: instead of the dedicated &lt;code&gt;QWEN_*&lt;/code&gt; variables, you can wire any Qwen chat model through PentAGI&#39;s custom OpenAI-compatible provider by pointing &lt;code&gt;OPENAI_SERVER_URL&lt;/code&gt; (or a custom provider entry) to the DashScope &lt;code&gt;/compatible-mode/v1&lt;/code&gt; endpoint and selecting the desired Qwen model name. Useful when you already manage all model traffic through a single OpenAI-shaped client (e.g. shared with LiteLLM/OneAPI proxies).&lt;/p&gt; 
&lt;h3&gt;MiniMax Provider Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI integrates with MiniMax&#39;s M-series through the OpenAI-compatible &lt;code&gt;https://api.minimax.io/v1&lt;/code&gt; endpoint: large-context agentic models with tool calling, JSON output, and streaming.&lt;/p&gt; 
&lt;h4&gt;Configuration Variables&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default Value&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MINIMAX_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;MiniMax API key for authentication&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MINIMAX_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://api.minimax.io/v1&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;MiniMax API endpoint URL&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MINIMAX_PROVIDER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Provider prefix for LiteLLM integration (optional)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration Examples&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Direct API usage
MINIMAX_API_KEY=your_minimax_api_key
MINIMAX_SERVER_URL=https://api.minimax.io/v1

# With LiteLLM proxy
MINIMAX_API_KEY=your_litellm_key
MINIMAX_SERVER_URL=http://litellm-proxy:4000
MINIMAX_PROVIDER=minimax  # Adds prefix to model names (minimax/MiniMax-M3) for LiteLLM
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Supported Models&lt;/h4&gt; 
&lt;p&gt;PentAGI ships 3 MiniMax models with tool calling, JSON output, and streaming. &lt;code&gt;MiniMax-M3&lt;/code&gt; is the default for all agent types.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model ID&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
   &lt;th&gt;Price (Input/Output, ≤512K context)&lt;/th&gt; 
   &lt;th&gt;Use Case&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MiniMax-M3&lt;/code&gt;*&lt;/td&gt; 
   &lt;td&gt;~1M&lt;/td&gt; 
   &lt;td&gt;$0.30/$1.20 (2x above 512K tokens)&lt;/td&gt; 
   &lt;td&gt;Latest flagship for agentic reasoning, tool use, code generation, and long-context tasks (default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MiniMax-M2.7&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;204K&lt;/td&gt; 
   &lt;td&gt;$0.30/$1.20&lt;/td&gt; 
   &lt;td&gt;Previous-generation model with strong reasoning and coding&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MiniMax-M2.7-highspeed&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;204K&lt;/td&gt; 
   &lt;td&gt;$0.60/$2.40&lt;/td&gt; 
   &lt;td&gt;Low-latency variant of M2.7 for fast-response scenarios&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;LiteLLM Integration&lt;/strong&gt;: Set &lt;code&gt;MINIMAX_PROVIDER=minimax&lt;/code&gt; to enable model name prefixing when using default PentAGI configurations with LiteLLM proxy. Leave empty for direct API usage.&lt;/p&gt; 
&lt;h2&gt;Advanced Setup&lt;/h2&gt; 
&lt;h3&gt;Langfuse Integration&lt;/h3&gt; 
&lt;p&gt;Langfuse provides advanced capabilities for monitoring and analyzing AI agent operations.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Configure Langfuse environment variables in existing &lt;code&gt;.env&lt;/code&gt; file.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;details&gt; 
 &lt;summary&gt;Langfuse valuable environment variables&lt;/summary&gt; 
 &lt;h3&gt;Database Credentials&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_POSTGRES_USER&lt;/code&gt; and &lt;code&gt;LANGFUSE_POSTGRES_PASSWORD&lt;/code&gt; - Langfuse PostgreSQL credentials&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_CLICKHOUSE_USER&lt;/code&gt; and &lt;code&gt;LANGFUSE_CLICKHOUSE_PASSWORD&lt;/code&gt; - ClickHouse credentials&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_REDIS_AUTH&lt;/code&gt; - Redis password&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Encryption and Security Keys&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_SALT&lt;/code&gt; - Salt for hashing in Langfuse Web UI&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_ENCRYPTION_KEY&lt;/code&gt; - Encryption key (32 bytes in hex)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_NEXTAUTH_SECRET&lt;/code&gt; - Secret key for NextAuth&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Admin Credentials&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_INIT_USER_EMAIL&lt;/code&gt; - Admin email&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_INIT_USER_PASSWORD&lt;/code&gt; - Admin password&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_INIT_USER_NAME&lt;/code&gt; - Admin username&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;API Keys and Tokens&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_INIT_PROJECT_PUBLIC_KEY&lt;/code&gt; - Project public key (used from PentAGI side too)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_INIT_PROJECT_SECRET_KEY&lt;/code&gt; - Project secret key (used from PentAGI side too)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;S3 Storage&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_S3_ACCESS_KEY_ID&lt;/code&gt; - S3 access key ID&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;LANGFUSE_S3_SECRET_ACCESS_KEY&lt;/code&gt; - S3 secret access key&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;Enable integration with Langfuse for PentAGI service in &lt;code&gt;.env&lt;/code&gt; file.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;LANGFUSE_BASE_URL=http://langfuse-web:3000
LANGFUSE_PROJECT_ID= # default: value from ${LANGFUSE_INIT_PROJECT_ID}
LANGFUSE_PUBLIC_KEY= # default: value from ${LANGFUSE_INIT_PROJECT_PUBLIC_KEY}
LANGFUSE_SECRET_KEY= # default: value from ${LANGFUSE_INIT_PROJECT_SECRET_KEY}
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;Run the Langfuse stack:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-langfuse.yml
docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Visit &lt;a href=&quot;http://localhost:4000&quot;&gt;localhost:4000&lt;/a&gt; to access Langfuse Web UI with credentials from &lt;code&gt;.env&lt;/code&gt; file:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;LANGFUSE_INIT_USER_EMAIL&lt;/code&gt; - Admin email&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;LANGFUSE_INIT_USER_PASSWORD&lt;/code&gt; - Admin password&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Monitoring and Observability&lt;/h3&gt; 
&lt;p&gt;For detailed system operation tracking, integration with monitoring tools is available.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Enable integration with OpenTelemetry and all observability services for PentAGI in &lt;code&gt;.env&lt;/code&gt; file.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;OTEL_HOST=otelcol:8148
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;Run the observability stack:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-observability.yml
docker compose -f docker-compose.yml -f docker-compose-observability.yml up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Visit &lt;a href=&quot;http://localhost:3000&quot;&gt;localhost:3000&lt;/a&gt; to access Grafana Web UI.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;If you want to use Observability stack with Langfuse, you need to enable integration in &lt;code&gt;.env&lt;/code&gt; file to set &lt;code&gt;LANGFUSE_OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code&gt; to &lt;code&gt;http://otelcol:4318&lt;/code&gt;.&lt;/p&gt; 
 &lt;p&gt;To run all available stacks together (Langfuse, Graphiti, and Observability):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose -f docker-compose.yml -f docker-compose-langfuse.yml -f docker-compose-graphiti.yml -f docker-compose-observability.yml up -d
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;You can also register aliases for these commands in your shell to run it faster:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;alias pentagi=&quot;docker compose -f docker-compose.yml -f docker-compose-langfuse.yml -f docker-compose-graphiti.yml -f docker-compose-observability.yml&quot;
alias pentagi-up=&quot;docker compose -f docker-compose.yml -f docker-compose-langfuse.yml -f docker-compose-graphiti.yml -f docker-compose-observability.yml up -d&quot;
alias pentagi-down=&quot;docker compose -f docker-compose.yml -f docker-compose-langfuse.yml -f docker-compose-graphiti.yml -f docker-compose-observability.yml down&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Knowledge Graph Integration (Graphiti)&lt;/h3&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;Graphiti is an optional &lt;strong&gt;beta&lt;/strong&gt; integration and is disabled by default. Review &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#limitations-and-security&quot;&gt;Limitations and Security&lt;/a&gt; before enabling it in production.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;PentAGI integrates with &lt;a href=&quot;https://github.com/vxcontrol/pentagi-graphiti&quot;&gt;Graphiti&lt;/a&gt;, a temporal knowledge graph system powered by Neo4j, to provide advanced semantic understanding and relationship tracking for AI agent operations. The vxcontrol fork provides custom entity and edge types that are specific to pentesting purposes.&lt;/p&gt; 
&lt;h4&gt;What is Graphiti?&lt;/h4&gt; 
&lt;p&gt;Graphiti asynchronously extracts structured knowledge from agent interactions and builds a graph of entities, relationships, evidence, and temporal context. PentAGI sends agent responses and tool executions to Graphiti and exposes the &lt;code&gt;graphiti_search&lt;/code&gt; tool to enabled agents. Graphiti complements the primary pgvector memory; it does not replace it.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Semantic Memory&lt;/strong&gt;: Store and recall relationships between tools, targets, vulnerabilities, and techniques&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Contextual Understanding&lt;/strong&gt;: Track how different pentesting actions relate to each other over time&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Flow-Scoped Recall&lt;/strong&gt;: Reuse knowledge within the active flow without exposing data from other engagements by default&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Advanced Querying&lt;/strong&gt;: Search temporal context, relationships, successful tools, recent episodes, and entities by type&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;When enabled, PentAGI captures agent responses, tool execution details, and flow/task/subtask context. Ingestion is asynchronous, so newly submitted events can take time to become searchable.&lt;/p&gt; 
&lt;h4&gt;Deployment Modes and Enabling&lt;/h4&gt; 
&lt;p&gt;Graphiti can run as the bundled Neo4j + Graphiti stack, as an external service, or remain disabled.&lt;/p&gt; 
&lt;p&gt;For the bundled stack, configure &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GRAPHITI_ENABLED=true
GRAPHITI_TIMEOUT=30
GRAPHITI_URL=http://graphiti:8000
GRAPHITI_LLM_CLIENT_TYPE=openai

# Reused by the Graphiti OpenAI preset
OPEN_AI_KEY=your_openai_api_key
OPEN_AI_SERVER_URL=https://api.openai.com/v1

# Bundled Neo4j
NEO4J_USER=neo4j
NEO4J_DATABASE=neo4j
NEO4J_PASSWORD=replace_with_a_strong_password
NEO4J_URI=bolt://neo4j:7687
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Download the optional compose file when installing manually, then start both stacks:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-graphiti.yml
docker compose -f docker-compose.yml -f docker-compose-graphiti.yml up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The base stack must create the external &lt;code&gt;pentagi-network&lt;/code&gt; before the Graphiti stack can start. The installer handles stack ordering automatically.&lt;/p&gt; 
&lt;p&gt;For an external Graphiti deployment, set &lt;code&gt;GRAPHITI_ENABLED=true&lt;/code&gt; and point &lt;code&gt;GRAPHITI_URL&lt;/code&gt; to its API. Do not start &lt;code&gt;docker-compose-graphiti.yml&lt;/code&gt;; configure providers, embeddings, the graph database, and ingest tuning on the external service itself.&lt;/p&gt; 
&lt;p&gt;PentAGI enables its client only when both &lt;code&gt;GRAPHITI_ENABLED=true&lt;/code&gt; and &lt;code&gt;GRAPHITI_URL&lt;/code&gt; is non-empty. At startup it performs three health-check attempts with a two-second backoff. If they all fail, PentAGI logs a warning and continues with Graphiti disabled.&lt;/p&gt; 
&lt;h4&gt;LLM Provider and Model Presets&lt;/h4&gt; 
&lt;p&gt;&lt;code&gt;GRAPHITI_LLM_CLIENT_TYPE&lt;/code&gt; selects one deployment-wide preset. Model names and call parameters are not environment variables; they live in &lt;code&gt;graphiti/&amp;lt;provider&amp;gt;.yaml&lt;/code&gt;.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Preset&lt;/th&gt; 
   &lt;th&gt;Credentials and endpoint&lt;/th&gt; 
   &lt;th&gt;Shipped main model&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;openai&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;OPEN_AI_KEY&lt;/code&gt;, &lt;code&gt;OPEN_AI_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;openai/gpt-5-mini&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gemini&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;GEMINI_API_KEY&lt;/code&gt;, &lt;code&gt;GEMINI_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;gemini/gemini-2.5-flash-lite&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;custom&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;LLM_SERVER_KEY&lt;/code&gt;, &lt;code&gt;LLM_SERVER_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Qwen/Qwen3.6-27B-FP8&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;litellm&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_LITELLM_API_KEY&lt;/code&gt;, &lt;code&gt;GRAPHITI_LITELLM_BASE_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;openrouter/openai/gpt-oss-20b&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The Gemini preset uses Graphiti&#39;s LiteLLM/OpenAI-compatible client path. Point &lt;code&gt;GEMINI_SERVER_URL&lt;/code&gt; at a compatible gateway if the native Gemini endpoint does not provide the required OpenAI-compatible API.&lt;/p&gt; 
&lt;p&gt;Each preset file must contain a matching &lt;code&gt;provider&lt;/code&gt; plus &lt;code&gt;MODEL_NAME&lt;/code&gt; and &lt;code&gt;SMALL_MODEL_NAME&lt;/code&gt; mappings. The small model is used for reranking and lighter calls. Supported call settings include temperature, token limits, sampling and penalty parameters, JSON mode, reasoning effort, verbosity, pricing metadata, and provider-specific &lt;code&gt;extra_body&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The installer copies &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/graphiti&quot;&gt;&lt;code&gt;examples/graphiti&lt;/code&gt;&lt;/a&gt; beside the installation as &lt;code&gt;./graphiti&lt;/code&gt;. The compose mount is controlled by:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GRAPHITI_CONFIG_PATH=./graphiti
GRAPHITI_CONFIG_DIR=llm_configs
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;GRAPHITI_CONFIG_PATH&lt;/code&gt; may point directly to &lt;code&gt;./examples/graphiti&lt;/code&gt; for development. &lt;code&gt;GRAPHITI_CONFIG_DIR=llm_configs&lt;/code&gt; activates the mounted presets. If an older &lt;code&gt;.env&lt;/code&gt; omits that variable, a newer compose file mounts an empty host directory at the unused &lt;code&gt;configs&lt;/code&gt; path instead of hiding the presets built into the image.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;code&gt;GRAPHITI_MODEL_NAME&lt;/code&gt; is obsolete and ignored. Edit the active YAML preset instead, then restart the Graphiti container.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h4&gt;Graphiti Embedding Configuration&lt;/h4&gt; 
&lt;p&gt;By default, Graphiti uses the active LLM preset&#39;s credentials and its default OpenAI embedding model. To use PentAGI&#39;s shared embedding endpoint explicitly:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GRAPHITI_SEPARATE_EMBEDDING=true
EMBEDDING_URL=https://embedding.example.com/v1
EMBEDDING_KEY=your_embedding_api_key
EMBEDDING_MODEL=openai/text-embedding-3-large
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Graphiti&#39;s embedder is OpenAI-compatible. &lt;code&gt;EMBEDDING_PROVIDER&lt;/code&gt; is used by PentAGI but is not passed to Graphiti, so a non-OpenAI-compatible embedding provider cannot be shared directly.&lt;/p&gt; 
&lt;h4&gt;Ingestion and Extraction Tuning&lt;/h4&gt; 
&lt;p&gt;The supplied defaults prioritize flow isolation and limit expensive extraction to useful events.&lt;/p&gt; 
&lt;p&gt;Ingest policy actions:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;REJECT&lt;/code&gt;: do not store the episode.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;SKIP_LLM&lt;/code&gt;: store the episode for retrieval but do not extract nodes or edges.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;PROCESS&lt;/code&gt;: store the episode and run full LLM extraction.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;When to change it&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_POLICY_RULES&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{&quot;graphiti_search&quot;:&quot;REJECT&quot;,&quot;tool_execution_terminal&quot;:&quot;PROCESS&quot;,&quot;tool_execution_file&quot;:&quot;PROCESS&quot;}&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Add narrow, case-insensitive name/source patterns when specific events need different handling&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_POLICY_FIELD&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;both&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Restrict matching to &lt;code&gt;name&lt;/code&gt; or &lt;code&gt;source_description&lt;/code&gt; only when event naming is controlled&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_POLICY_DEFAULT_ACTION&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;SKIP_LLM&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Use &lt;code&gt;PROCESS&lt;/code&gt; only when every unmatched event justifies extraction cost&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_USE_GROUP_ACTORS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Keep enabled to preserve FIFO ordering independently for each flow&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_WORKER_COUNT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Raise for more concurrent flows when the LLM and database have capacity; lower to control load&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_LOCK_BY_GROUP_ID&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Used only in shared-pool mode; ignored when group actors are enabled&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_TASK_MAX_RETRIES&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;1&lt;/code&gt; (&lt;code&gt;0&lt;/code&gt;-&lt;code&gt;5&lt;/code&gt;)&lt;/td&gt; 
   &lt;td&gt;Increase for transient LLM/network failures&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_TASK_RETRY_DELAY_SEC&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;2.0&lt;/code&gt; (&lt;code&gt;0.5&lt;/code&gt;-&lt;code&gt;60&lt;/code&gt;)&lt;/td&gt; 
   &lt;td&gt;Increase when an upstream service needs more recovery time&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_TASK_TIMEOUT_SEC&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;0&lt;/code&gt; (&lt;code&gt;0&lt;/code&gt;-&lt;code&gt;3600&lt;/code&gt;)&lt;/td&gt; 
   &lt;td&gt;Set a finite value to prevent one stalled request from blocking a flow; &lt;code&gt;0&lt;/code&gt; disables the timeout&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_QUEUE_MAX_SIZE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Set a bound to return HTTP 429 instead of allowing an unlimited backlog&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_INGEST_DEAD_LETTER_ENABLED&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enable when failed episodes must be retained for operational review&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Extraction uses the following fallback order: full combined extraction (nodes, attributes, summaries, and edges in one call), regular combined extraction (nodes and edges), then separate node/edge extraction. Empty or failed combined results automatically fall back; these log messages are expected during normal operation.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Effect&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_TAXONOMY_LAYER_PROFILE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;STRUCTURAL,EVIDENCE,PROGRESS,ATTEMPT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Controls which edge classes appear in prompts and pass validation; &lt;code&gt;full&lt;/code&gt;/&lt;code&gt;all&lt;/code&gt; enables every class and &lt;code&gt;minimal&lt;/code&gt; selects the core attack graph&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_USE_COMBINED_FULL_EXTRACTION&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enables the most compact single-call extraction path&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_USE_COMBINED_EXTRACTION&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enables the regular combined fallback&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_COMBINED_FULL_GATING_ENABLED&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Skips expensive full extraction for low-signal administrative/search events&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_COMBINED_DIAGNOSTIC_SAMPLES&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Includes content samples in diagnostics; keep disabled because pentest output can contain credentials&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_ANCHOR_NODE_MODE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;smart&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;smart&lt;/code&gt; loads all key entities plus limited high-volume types; &lt;code&gt;limit&lt;/code&gt; applies one total cap&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_ANCHOR_NODE_LIMIT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;25&lt;/code&gt; (&lt;code&gt;1&lt;/code&gt;-&lt;code&gt;500&lt;/code&gt;)&lt;/td&gt; 
   &lt;td&gt;Total anchor cap in &lt;code&gt;limit&lt;/code&gt; mode&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_ANCHOR_MASS_TYPE_LIMIT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;10&lt;/code&gt; (&lt;code&gt;1&lt;/code&gt;-&lt;code&gt;100&lt;/code&gt;)&lt;/td&gt; 
   &lt;td&gt;Per-type cap in &lt;code&gt;smart&lt;/code&gt; mode; &lt;code&gt;0&lt;/code&gt; is invalid&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_ANCHOR_QUERY_TIMEOUT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;10&lt;/code&gt; (&lt;code&gt;1&lt;/code&gt;-&lt;code&gt;60&lt;/code&gt;)&lt;/td&gt; 
   &lt;td&gt;Bounds anchor lookup; timeout degrades gracefully to no anchors&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Anchors connect entities across episodes and are used by the separate extraction path. Combined extraction has already produced its edges and does not perform this anchor lookup.&lt;/p&gt; 
&lt;p&gt;These flags are passed as process environment variables by the bundled compose file. This is important for combined extraction because Graphiti reads those flags when Python modules are imported.&lt;/p&gt; 
&lt;h4&gt;Runtime, Logging, and Neo4j&lt;/h4&gt; 
&lt;p&gt;The values below are PentAGI&#39;s recommended &lt;code&gt;.env.example&lt;/code&gt;/compose defaults, not the raw Graphiti image fallbacks. Running a freshly pulled image behind an old compose file can instead enable telemetry and global search, use one shared-pool worker with &lt;code&gt;PROCESS&lt;/code&gt; as the unmatched ingest action, enable the full taxonomy, and disable combined extraction. Keep the image, compose file, &lt;code&gt;.env&lt;/code&gt;, and presets in sync.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Guidance&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_CPUS&lt;/code&gt;, &lt;code&gt;GRAPHITI_MEMORY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;2.0&lt;/code&gt;, &lt;code&gt;2G&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Container limits; raise together with concurrency only after observing CPU and memory pressure&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_SEMAPHORE_LIMIT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;20&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Limits parallel Graphiti coroutines; it is separate from ingest worker concurrency&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_TELEMETRY_ENABLED&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enables anonymous Graphiti telemetry when set to &lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_LOG_LEVEL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;INFO&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Use &lt;code&gt;DEBUG&lt;/code&gt; temporarily; it can produce sensitive and high-volume output&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_LOG_STDOUT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;events&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;off&lt;/code&gt;, &lt;code&gt;events&lt;/code&gt;, or &lt;code&gt;full&lt;/code&gt;; &lt;code&gt;events&lt;/code&gt; is recommended for containers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_FLOW_LOGGER_WARN_COUNT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;256&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Warns about growth of cached per-flow loggers; &lt;code&gt;0&lt;/code&gt; disables the warning&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_DEBUG_RUNTIME_RESOURCES&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enables &lt;code&gt;/debug/runtime-resources&lt;/code&gt;; expose only to trusted operators&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_SEARCH_SCOPE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;flowid&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Keep for flow/tenant isolation; &lt;code&gt;all&lt;/code&gt; enables global searches and can expose other engagements&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GRAPHITI_LOG_FORMAT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;json&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Reserved by the current deployment contract; the Graphiti logger does not yet apply it&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NEO4J_CPUS&lt;/code&gt;, &lt;code&gt;NEO4J_MEMORY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;4.0&lt;/code&gt;, &lt;code&gt;4G&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Neo4j container limits; use &lt;code&gt;neo4j-admin server memory-recommendation --docker&lt;/code&gt; for production sizing&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NEO4J_SHM_SIZE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;4g&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/dev/shm&lt;/code&gt; limit; actual use counts toward the container memory limit&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NEO4J_NOFILE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;65536&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Open-file soft/hard limit, suitable for many indexes and concurrent connections&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NEO4J_HEAP_INITIAL_SIZE&lt;/code&gt;, &lt;code&gt;NEO4J_HEAP_MAX_SIZE&lt;/code&gt;, &lt;code&gt;NEO4J_PAGECACHE_SIZE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;2G&lt;/code&gt;, &lt;code&gt;2G&lt;/code&gt;, &lt;code&gt;1G&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;JVM heap/page cache sizing; &lt;code&gt;NEO4J_CPUS&lt;/code&gt;/&lt;code&gt;NEO4J_MEMORY&lt;/code&gt; only cap the container, the JVM does not reliably size itself to fit inside that cap on its own. Defaults favor heap over page cache — suited to a low write-throughput deployment with occasional wide reads, since query execution/result materialization lives in heap while a small dataset is already comfortably held by 1G of page cache; re-run &lt;code&gt;neo4j-admin server memory-recommendation --docker&lt;/code&gt; once real data volume is known&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NEO4J_TRANSACTION_MAX&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;1G&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Caps a single transaction&#39;s memory (&lt;code&gt;db.memory.transaction.max&lt;/code&gt;) so one runaway/unbounded query (e.g. a Cartesian product or an unbounded variable-length path before a &lt;code&gt;LIMIT&lt;/code&gt;) fails cleanly with an out-of-memory Cypher error instead of exhausting the whole heap and taking down every other query on the server&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NEO4J_BOLT_ADVERTISED_ADDRESS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;empty&lt;/td&gt; 
   &lt;td&gt;Set only when Neo4j Browser and the Bolt connector are reverse-proxied on different public domains (e.g. behind Guarder with CORS/cookie-group support for cross-origin bolt access); format &lt;code&gt;host:port&lt;/code&gt;. Left empty, Neo4j&#39;s discovery endpoint advertises whatever &lt;code&gt;Host&lt;/code&gt; header the request arrived with, which is correct only when both share one domain&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NEO4J_HTTP_ADVERTISED_ADDRESS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;empty&lt;/td&gt; 
   &lt;td&gt;Set only when a reverse proxy in front of Neo4j Browser strips or rewrites the &lt;code&gt;Host&lt;/code&gt; header, making the dynamic Host-header-based advertised address incorrect; format &lt;code&gt;host:port&lt;/code&gt;. Leave empty in the common case (proxy forwards &lt;code&gt;Host&lt;/code&gt; unchanged)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;code&gt;NEO4J_USER&lt;/code&gt;, &lt;code&gt;NEO4J_PASSWORD&lt;/code&gt;, &lt;code&gt;NEO4J_URI&lt;/code&gt;, and &lt;code&gt;NEO4J_DATABASE&lt;/code&gt; configure the bundled connection. Neo4j Community Edition supports only its default database; do not configure a separate database name that requires Enterprise multi-database support.&lt;/p&gt; 
&lt;p&gt;The installer copies &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/neo4j&quot;&gt;&lt;code&gt;examples/neo4j&lt;/code&gt;&lt;/a&gt; beside the installation as &lt;code&gt;./neo4j&lt;/code&gt;. It contains static, non-&lt;code&gt;.env&lt;/code&gt;-tunable settings that don&#39;t have a &lt;code&gt;NEO4J_*&lt;/code&gt; variable: &lt;code&gt;conf/neo4j.conf&lt;/code&gt; and &lt;code&gt;conf/apoc.conf&lt;/code&gt;, plus a version-pinned &lt;code&gt;plugins/apoc-*-core.jar&lt;/code&gt;. The compose mount is controlled by:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;NEO4J_DIR=./neo4j
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;NEO4J_DIR&lt;/code&gt; may point directly to &lt;code&gt;./examples/neo4j&lt;/code&gt; for development. Both &lt;code&gt;conf/&lt;/code&gt; and &lt;code&gt;plugins/&lt;/code&gt; are mounted read-only; the stack still starts on Neo4j&#39;s built-in defaults (without APOC) if the directory is absent, since Docker creates an empty one automatically. Do not duplicate any &lt;code&gt;NEO4J_*&lt;/code&gt; variable from the table above inside &lt;code&gt;conf/neo4j.conf&lt;/code&gt; — the Neo4j Docker entrypoint always strips a matching line from the mounted file and re-appends the environment variable&#39;s value, so a duplicated setting in the file would be silently ignored.&lt;/p&gt; 
&lt;p&gt;The bundled stack currently wires Neo4j only. The Graphiti image contains FalkorDB support, but using it requires a separately configured deployment because the stock compose file does not expose &lt;code&gt;GRAPHITI_GRAPH_BACKEND&lt;/code&gt; or &lt;code&gt;FALKORDB_*&lt;/code&gt;.&lt;/p&gt; 
&lt;h4&gt;Verification and Troubleshooting&lt;/h4&gt; 
&lt;p&gt;Check service health, queue state, and logs:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose -f docker-compose.yml -f docker-compose-graphiti.yml ps graphiti neo4j
docker compose -f docker-compose.yml -f docker-compose-graphiti.yml logs -f graphiti
curl -fsS http://localhost:8000/healthcheck
curl -fsS http://localhost:8000/queue-size
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Neo4j Browser is available at &lt;code&gt;http://localhost:7474&lt;/code&gt;; the Graphiti OpenAPI UI is at &lt;code&gt;http://localhost:8000/docs&lt;/code&gt;. Both are bound to localhost by the stock compose file.&lt;/p&gt; 
&lt;p&gt;Common failures:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;A missing API key or base URL for the selected preset, a missing YAML file, or a YAML &lt;code&gt;provider&lt;/code&gt; mismatch causes the Graphiti container to fail startup validation.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;LLM_CLIENT_TYPE=openai&lt;/code&gt; rejects local/custom model prefixes; use the &lt;code&gt;custom&lt;/code&gt; preset for an OpenAI-compatible local server.&lt;/li&gt; 
 &lt;li&gt;In &lt;code&gt;flowid&lt;/code&gt; search mode, requests without a group ID are rejected. PentAGI supplies the flow-derived group ID automatically.&lt;/li&gt; 
 &lt;li&gt;A bounded full queue returns HTTP 429. &lt;code&gt;/queue-size&lt;/code&gt; reports waiting, processing, active-group, and dropped counters.&lt;/li&gt; 
 &lt;li&gt;Invalid retry, timeout, or anchor ranges fail startup rather than being silently normalized.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Update &lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;docker-compose-graphiti.yml&lt;/code&gt;, the Graphiti image, and the &lt;code&gt;graphiti&lt;/code&gt; preset directory together. Pulling only a new image can retain older compose defaults and silently change extraction behavior.&lt;/p&gt; 
&lt;h4&gt;Limitations and Security&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;Graphiti is beta and has no in-app graph explorer.&lt;/li&gt; 
 &lt;li&gt;One provider preset is active for the entire Graphiti deployment; it is not selected per PentAGI agent or flow.&lt;/li&gt; 
 &lt;li&gt;Graphiti extraction, reranking, and embeddings incur billing independently of the model used by the main PentAGI flow.&lt;/li&gt; 
 &lt;li&gt;Search is flow-scoped by default. Cross-flow reuse requires an explicit global-search design and must not be enabled on shared or multi-tenant deployments without additional isolation.&lt;/li&gt; 
 &lt;li&gt;The Graphiti HTTP API has no authentication layer in the bundled service. The stock compose binds it and Neo4j to &lt;code&gt;127.0.0.1&lt;/code&gt;; secure external deployments with network controls and authentication at a trusted reverse proxy.&lt;/li&gt; 
 &lt;li&gt;Agent and tool output may contain credentials and exploitation evidence. Protect Neo4j data, logs, dead letters, diagnostics, and backups accordingly.&lt;/li&gt; 
 &lt;li&gt;If Graphiti is unavailable, PentAGI continues with its primary memory and vector store after logging the failed startup health check. Set &lt;code&gt;GRAPHITI_ENABLED=false&lt;/code&gt; to disable the integration explicitly.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;GitHub and Google OAuth Integration&lt;/h3&gt; 
&lt;p&gt;OAuth integration with GitHub and Google allows users to authenticate using their existing accounts on these platforms. This provides several benefits:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Simplified login process without need to create separate credentials&lt;/li&gt; 
 &lt;li&gt;Enhanced security through trusted identity providers&lt;/li&gt; 
 &lt;li&gt;Access to user profile information from GitHub/Google accounts&lt;/li&gt; 
 &lt;li&gt;Seamless integration with existing development workflows&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;PentAGI uses &lt;code&gt;PUBLIC_URL&lt;/code&gt; as the public origin/base URL for OAuth redirects. In the default deployment, both GitHub and Google callbacks are handled by:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;${PUBLIC_URL}/api/v1/auth/login-callback
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For GitHub OAuth:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create a new OAuth App in your GitHub account.&lt;/li&gt; 
 &lt;li&gt;Set &lt;strong&gt;Homepage URL&lt;/strong&gt; to your &lt;code&gt;PUBLIC_URL&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Set &lt;strong&gt;Authorization callback URL&lt;/strong&gt; to &lt;code&gt;${PUBLIC_URL}/api/v1/auth/login-callback&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Add the client credentials to your &lt;code&gt;.env&lt;/code&gt; file:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;PUBLIC_URL=https://pentagi.example.com
OAUTH_GITHUB_CLIENT_ID=your_github_client_id
OAUTH_GITHUB_CLIENT_SECRET=your_github_client_secret
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For Google OAuth:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create OAuth credentials in your Google Cloud project.&lt;/li&gt; 
 &lt;li&gt;Use the same callback endpoint: &lt;code&gt;${PUBLIC_URL}/api/v1/auth/login-callback&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Add the client credentials to your &lt;code&gt;.env&lt;/code&gt; file:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;PUBLIC_URL=https://pentagi.example.com
OAUTH_GOOGLE_CLIENT_ID=your_google_client_id
OAUTH_GOOGLE_CLIENT_SECRET=your_google_client_secret
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Make sure &lt;code&gt;PUBLIC_URL&lt;/code&gt; matches the externally accessible HTTPS address of your PentAGI instance and does not include the callback path itself. If the URL configured in the OAuth provider does not exactly match the callback generated by PentAGI, the provider will reject the login attempt with a redirect URI mismatch error.&lt;/p&gt; 
&lt;h3&gt;Docker Image Configuration&lt;/h3&gt; 
&lt;p&gt;PentAGI allows you to configure Docker image selection for executing various tasks. The system automatically chooses the most appropriate image based on the task type, but you can constrain this selection by specifying your preferred images:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PENTAGI_IMAGE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;vxcontrol/pentagi:latest&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Docker image used for the main PentAGI application service&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DOCKER_DEFAULT_IMAGE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;debian:latest&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Default Docker image for general tasks and ambiguous cases&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DOCKER_DEFAULT_IMAGE_FOR_PENTEST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;vxcontrol/kali-linux&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Default Docker image for security/penetration testing tasks&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;code&gt;PENTAGI_IMAGE&lt;/code&gt; changes the image used by the main &lt;code&gt;pentagi&lt;/code&gt; service in &lt;code&gt;docker-compose.yml&lt;/code&gt;. The &lt;code&gt;DOCKER_DEFAULT_IMAGE&lt;/code&gt; and &lt;code&gt;DOCKER_DEFAULT_IMAGE_FOR_PENTEST&lt;/code&gt; variables only affect automatic worker image selection for task execution inside PentAGI. They do not rewrite the rest of the Compose stack, so services such as &lt;code&gt;pgvector&lt;/code&gt;, &lt;code&gt;scraper&lt;/code&gt;, and the optional &lt;code&gt;graphiti&lt;/code&gt; stack still use the image references defined in the compose files.&lt;/p&gt; 
&lt;p&gt;When &lt;code&gt;DOCKER_DEFAULT_IMAGE&lt;/code&gt; and &lt;code&gt;DOCKER_DEFAULT_IMAGE_FOR_PENTEST&lt;/code&gt; are set, AI agents will be limited to the image choices you specify. This is particularly useful for:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Security Enforcement&lt;/strong&gt;: Restricting usage to only verified and trusted images&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Environment Standardization&lt;/strong&gt;: Using corporate or customized images across all operations&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;: Utilizing pre-built images with necessary tools already installed&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Configuration examples:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Using a custom PentAGI application image
PENTAGI_IMAGE=registry.example.com/security/pentagi:latest

# Using a custom image for general tasks
DOCKER_DEFAULT_IMAGE=mycompany/custom-debian:latest

# Using a specialized image for penetration testing
DOCKER_DEFAULT_IMAGE_FOR_PENTEST=mycompany/pentest-tools:v2.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;If a user explicitly specifies a particular Docker image in their task, the system will try to use that exact image, ignoring these settings. These variables only affect the system&#39;s automatic image selection process.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;For an advanced OpenVAS/GVM experiment that uses a custom pentest image, see &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/guides/openvas-custom-image.md&quot;&gt;OpenVAS via a Custom Pentest Image&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Restricted Networks, Docker Mirrors, and Proxies&lt;/h4&gt; 
&lt;p&gt;If your environment cannot reach Docker Hub (&lt;code&gt;docker.io&lt;/code&gt;) directly, changing PentAGI environment variables is usually not enough to fix image download failures. PentAGI still relies on Docker&#39;s own registry access for Compose-managed services, and the installer network checks also validate Docker Hub reachability.&lt;/p&gt; 
&lt;p&gt;For restricted networks:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Confirm that the host can resolve and reach &lt;code&gt;docker.io&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;If your environment requires an outbound proxy for PentAGI or installer HTTP traffic, set the &lt;code&gt;PROXY_URL&lt;/code&gt; environment variable. To route Docker image pulls through a proxy, configure the Docker daemon or Docker Desktop proxy separately — Docker does not use PentAGI&#39;s &lt;code&gt;PROXY_URL&lt;/code&gt; for registry access.&lt;/li&gt; 
 &lt;li&gt;If Docker Hub is blocked or heavily rate-limited, configure an organization-approved registry mirror or registry proxy before running the installer or &lt;code&gt;docker compose up&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Restart Docker after changing the daemon configuration, then rerun the installer checks or Compose startup.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Example Docker daemon mirror configuration:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;registry-mirrors&quot;: [&quot;https://mirror.example.com&quot;]
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;On Linux, this is typically configured in &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt;. On Docker Desktop, use the equivalent Docker Engine or proxy settings. A Docker Hub mirror covers Docker Hub-hosted images such as &lt;code&gt;vxcontrol/*&lt;/code&gt;, but the main Compose stack already includes &lt;code&gt;quay.io/prometheuscommunity/postgres-exporter&lt;/code&gt;, and the optional observability stack includes &lt;code&gt;gcr.io/cadvisor/cadvisor&lt;/code&gt;. Those registries still need direct access or individually approved proxy/mirror paths.&lt;/p&gt; 
&lt;p&gt;See the official Docker documentation for &lt;a href=&quot;https://docs.docker.com/docker-hub/image-library/mirror/&quot;&gt;registry mirrors&lt;/a&gt; and &lt;a href=&quot;https://docs.docker.com/engine/daemon/proxy/&quot;&gt;daemon proxy configuration&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Troubleshooting: &quot;failed to select primary docker image via llm call&quot;&lt;/h4&gt; 
&lt;p&gt;A flow that fails immediately with &lt;code&gt;failed to select primary docker image via llm call&lt;/code&gt; usually indicates a problem with the configured LLM backend, not with Docker or the image registry. Older PentAGI versions reported the same failure as &lt;code&gt;failed to get primary docker image&lt;/code&gt;, which led users to debug Docker even though the registry was healthy.&lt;/p&gt; 
&lt;p&gt;When a flow starts, PentAGI makes its first LLM call to choose the primary Docker image for the task. This image-selection call runs through the &lt;code&gt;simple&lt;/code&gt; agent type, so a failure here points at the model assigned to that agent type rather than at Docker. A message such as &lt;code&gt;API returned unexpected status code: 502&lt;/code&gt; or &lt;code&gt;404&lt;/code&gt; in this context is returned by the LLM backend, not by Docker Hub.&lt;/p&gt; 
&lt;p&gt;This is distinct from the registry reachability problems described above: if Docker pulls succeed and the Compose stack starts, but flow creation still fails at image selection, investigate the LLM backend rather than Docker.&lt;/p&gt; 
&lt;p&gt;To diagnose:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Check PentAGI logs first: &lt;code&gt;docker logs pentagi&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Check the logs of your configured LLM backend (the server behind your provider or &lt;code&gt;LLM_SERVER_URL&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;Verify that the base URL, API key, and model name in &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#custom-llm-provider-configuration&quot;&gt;Custom LLM Provider Configuration&lt;/a&gt; are correct and reachable from the container. If you assign different models per agent type, check the model used by the &lt;code&gt;simple&lt;/code&gt; agent type, since image selection runs through it.&lt;/li&gt; 
 &lt;li&gt;For custom, OpenAI-compatible, vLLM, or SGLang backends, confirm that the model supports tool calling (function calling) and that the matching tool-call parser is enabled. A missing or mismatched tool-call parser is a known cause of this failure.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;h3&gt;Development Requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;golang&lt;/li&gt; 
 &lt;li&gt;nodejs&lt;/li&gt; 
 &lt;li&gt;docker&lt;/li&gt; 
 &lt;li&gt;postgres&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Environment Setup&lt;/h3&gt; 
&lt;h4&gt;Backend Setup&lt;/h4&gt; 
&lt;p&gt;Run once &lt;code&gt;cd backend &amp;amp;&amp;amp; go mod download&lt;/code&gt; to install needed packages.&lt;/p&gt; 
&lt;p&gt;For generating swagger files have to run&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;swag init -g ../../pkg/server/router.go -o pkg/server/docs/ --parseDependency --parseInternal --parseDepth 2 -d cmd/pentagi
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;before installing &lt;code&gt;swag&lt;/code&gt; package via&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go install github.com/swaggo/swag/cmd/swag@v1.8.7
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For generating graphql resolver files have to run&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go run github.com/99designs/gqlgen --config ./gqlgen/gqlgen.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;after that you can see the generated files in &lt;code&gt;pkg/graph&lt;/code&gt; folder.&lt;/p&gt; 
&lt;p&gt;For generating ORM methods (database package) from sqlc configuration&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --rm -v $(pwd):/src -w /src --network pentagi-network -e DATABASE_URL=&quot;{URL}&quot; sqlc/sqlc:1.27.0 generate -f sqlc/sqlc.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For generating Langfuse SDK from OpenAPI specification&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;fern generate --local
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and to install fern-cli&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm add -g fern-api
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Testing&lt;/h4&gt; 
&lt;p&gt;For running tests &lt;code&gt;cd backend &amp;amp;&amp;amp; go test -v ./...&lt;/code&gt;&lt;/p&gt; 
&lt;h4&gt;Frontend Setup&lt;/h4&gt; 
&lt;p&gt;Run once &lt;code&gt;cd frontend &amp;amp;&amp;amp; pnpm install&lt;/code&gt; to install needed packages.&lt;/p&gt; 
&lt;p&gt;For generating graphql files have to run &lt;code&gt;pnpm run graphql:generate&lt;/code&gt; which using &lt;code&gt;graphql-codegen.ts&lt;/code&gt; file.&lt;/p&gt; 
&lt;p&gt;Be sure that you have &lt;code&gt;graphql-codegen&lt;/code&gt; installed globally:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pnpm add -g graphql-codegen
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;After that you can run:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;pnpm run prettier&lt;/code&gt; to check if your code is formatted correctly&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pnpm run prettier:fix&lt;/code&gt; to fix it&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pnpm run lint&lt;/code&gt; to check if your code is linted correctly&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pnpm run lint:fix&lt;/code&gt; to fix it&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For generating SSL certificates you need to run &lt;code&gt;pnpm run ssl:generate&lt;/code&gt; which using &lt;code&gt;generate-ssl.ts&lt;/code&gt; file or it will be generated automatically when you run &lt;code&gt;pnpm run dev&lt;/code&gt;.&lt;/p&gt; 
&lt;h4&gt;Backend Configuration&lt;/h4&gt; 
&lt;p&gt;Edit the configuration for &lt;code&gt;backend&lt;/code&gt; in &lt;code&gt;.vscode/launch.json&lt;/code&gt; file:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;DATABASE_URL&lt;/code&gt; - PostgreSQL database URL (eg. &lt;code&gt;postgres://postgres:postgres@localhost:5432/pentagidb?sslmode=disable&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;DOCKER_HOST&lt;/code&gt; - Docker SDK API (eg. for macOS &lt;code&gt;DOCKER_HOST=unix:///Users/&amp;lt;my-user&amp;gt;/Library/Containers/com.docker.docker/Data/docker.raw.sock&lt;/code&gt;) &lt;a href=&quot;https://stackoverflow.com/a/62757128/5922857&quot;&gt;more info&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Optional:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;SERVER_PORT&lt;/code&gt; - Port to run the server (default: &lt;code&gt;8443&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;SERVER_USE_SSL&lt;/code&gt; - Enable SSL for the server (default: &lt;code&gt;false&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5&gt;PostgreSQL / pgvector connection pool sizing&lt;/h5&gt; 
&lt;p&gt;PentAGI opens two independent connection pools to the same Postgres instance:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Pool&lt;/th&gt; 
   &lt;th&gt;Env var&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Used by&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Shared &lt;code&gt;sql.DB&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;DATABASE_MAX_OPEN_CONNS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;25&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;All sqlc queries and GORM handlers share a single &lt;code&gt;*sql.DB&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Shared &lt;code&gt;pgxpool&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;DATABASE_VECTOR_MAX_CONNS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;All pgvector stores (agent memory + knowledge API) share a single pool&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Additional tuning knob:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;DATABASE_MAX_IDLE_CONNS&lt;/code&gt; — maximum idle connections kept open in the &lt;code&gt;sql.DB&lt;/code&gt; pool between requests (default: &lt;code&gt;5&lt;/code&gt;).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Budget for the stock &lt;code&gt;vxcontrol/pgvector&lt;/code&gt; image&lt;/strong&gt; (&lt;code&gt;max_connections = 100&lt;/code&gt;, &lt;code&gt;superuser_reserved_connections = 3&lt;/code&gt;):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Available for client connections  = 97
  pentagi sql.DB  (DATABASE_MAX_OPEN_CONNS)   = 25
  pentagi pgxpool (DATABASE_VECTOR_MAX_CONNS) = 10
  pgexporter                                  =  3
  autovacuum workers                          =  3
  ─────────────────────────────────────────
  Total consumed                              = 41
  Free buffer                                 = 56  (≈ 58 %)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The defaults are sized for &lt;strong&gt;10 parallel flows&lt;/strong&gt; with concurrent API requests. If you run more flows or deploy multiple PentAGI instances against the same Postgres, raise &lt;code&gt;max_connections&lt;/code&gt; via the &lt;code&gt;command&lt;/code&gt; override in &lt;code&gt;docker-compose.yml&lt;/code&gt; and increase the pool sizes proportionally:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;pgvector:
  image: vxcontrol/pgvector:latest
  command: postgres -c max_connections=200
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To inspect the live connection budget on a running deployment:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Postgres limits
docker exec pgvector sh -c &#39;psql -U &quot;$POSTGRES_USER&quot; -d &quot;$POSTGRES_DB&quot; -c \
  &quot;SELECT name, setting FROM pg_settings
   WHERE name IN (&#39;&quot;&#39;&quot;&#39;max_connections&#39;&quot;&#39;&quot;&#39;, &#39;&quot;&#39;&quot;&#39;superuser_reserved_connections&#39;&quot;&#39;&quot;&#39;);&quot;&#39;

# Current usage vs. available
docker exec pgvector sh -c &#39;psql -U &quot;$POSTGRES_USER&quot; -d &quot;$POSTGRES_DB&quot; -c \
  &quot;SELECT max_conn, used, max_conn - used AS available
   FROM (SELECT current_setting(&#39;&quot;&#39;&quot;&#39;max_connections&#39;&quot;&#39;&quot;&#39;)::int AS max_conn,
                count(*) AS used FROM pg_stat_activity) t;&quot;&#39;

# Breakdown by client
docker exec pgvector sh -c &#39;psql -U &quot;$POSTGRES_USER&quot; -d &quot;$POSTGRES_DB&quot; -c \
  &quot;SELECT application_name, client_addr, state, count(*)
   FROM pg_stat_activity
   WHERE pid &amp;lt;&amp;gt; pg_backend_pid()
   GROUP BY 1, 2, 3 ORDER BY count DESC;&quot;&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;External PostgreSQL and schema handling&lt;/h5&gt; 
&lt;p&gt;&lt;code&gt;DATABASE_URL&lt;/code&gt; may point at any PostgreSQL instance, not only the bundled &lt;code&gt;pgvector&lt;/code&gt; container. Two extra knobs apply when — and only when — &lt;code&gt;TENANT_ID&lt;/code&gt; is set, because that is when PentAGI creates its own schema and rewrites the connection&#39;s &lt;code&gt;search_path&lt;/code&gt;:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Env var&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Purpose&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DATABASE_EXTENSIONS_SCHEMA&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;public&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Schema holding the shared &lt;code&gt;vector&lt;/code&gt; and &lt;code&gt;pg_trgm&lt;/code&gt; extensions that every tenant&#39;s &lt;code&gt;search_path&lt;/code&gt; must reach&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DATABASE_SEARCH_PATH_VIA_OPTIONS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Send the tenant &lt;code&gt;search_path&lt;/code&gt; inside the &lt;code&gt;options&lt;/code&gt; startup parameter instead of as a bare connection parameter&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Supabase (cloud or self-hosted)&lt;/strong&gt; needs both of them considered, and is the reason they exist:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Supabase installs its bundled extensions into an &lt;code&gt;extensions&lt;/code&gt; schema instead of &lt;code&gt;public&lt;/code&gt;, so set &lt;code&gt;DATABASE_EXTENSIONS_SCHEMA=extensions&lt;/code&gt;. Without it, startup aborts with an error naming the schema where &lt;code&gt;vector&lt;/code&gt; was actually found — no need to move a provider-managed extension with &lt;code&gt;ALTER EXTENSION&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Supabase&#39;s pooler (Supavisor) does not reliably forward a bare &lt;code&gt;search_path&lt;/code&gt; connection parameter. Prefer a &lt;strong&gt;direct&lt;/strong&gt; PostgreSQL connection: self-hosted, expose the &lt;code&gt;db&lt;/code&gt; service port and bypass the &lt;code&gt;supavisor&lt;/code&gt; service; cloud, use the &quot;Direct connection&quot; string (or the IPv4 add-on on IPv4-only networks). If the pooler cannot be bypassed, use its session mode and try &lt;code&gt;DATABASE_SEARCH_PATH_VIA_OPTIONS=true&lt;/code&gt; — PentAGI verifies the effective schema on boot and refuses to start if it did not take effect, so a silent cross-tenant data mix-up is not possible.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Both settings are managed by the installer under &lt;em&gt;Server Settings&lt;/em&gt;, next to &lt;code&gt;TENANT_ID&lt;/code&gt; — see &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#running-several-instances-tenant_id&quot;&gt;Running Several Instances&lt;/a&gt; for that scenario, and &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/backend/docs/config.md#multi-instance-deployment-tenant_id&quot;&gt;Multi-Instance Deployment&lt;/a&gt; for the full matrix, including the PgBouncer recipe (&lt;code&gt;pool_mode = session&lt;/code&gt;, &lt;code&gt;ignore_startup_parameters&lt;/code&gt;, per-tenant &lt;code&gt;connect_query&lt;/code&gt;).&lt;/p&gt; 
&lt;h4&gt;Frontend Configuration&lt;/h4&gt; 
&lt;p&gt;Edit the configuration for &lt;code&gt;frontend&lt;/code&gt; in &lt;code&gt;.vscode/launch.json&lt;/code&gt; file:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;VITE_API_URL&lt;/code&gt; - Backend API URL. &lt;em&gt;Omit&lt;/em&gt; the URL scheme (e.g., &lt;code&gt;localhost:8080&lt;/code&gt; &lt;em&gt;NOT&lt;/em&gt; &lt;code&gt;http://localhost:8080&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;VITE_USE_HTTPS&lt;/code&gt; - Enable SSL for the server (default: &lt;code&gt;false&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;VITE_PORT&lt;/code&gt; - Port to run the server (default: &lt;code&gt;8000&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;VITE_HOST&lt;/code&gt; - Host to run the server (default: &lt;code&gt;0.0.0.0&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Running the Application&lt;/h3&gt; 
&lt;h4&gt;Backend&lt;/h4&gt; 
&lt;p&gt;Run the command(s) in &lt;code&gt;backend&lt;/code&gt; folder:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Use &lt;code&gt;.env&lt;/code&gt; file to set environment variables like a &lt;code&gt;source .env&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;go run cmd/pentagi/main.go&lt;/code&gt; to start the server&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;The first run can take a while as dependencies and docker images need to be downloaded to setup the backend environment.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h4&gt;Frontend&lt;/h4&gt; 
&lt;p&gt;Run the command(s) in &lt;code&gt;frontend&lt;/code&gt; folder:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Run &lt;code&gt;pnpm install&lt;/code&gt; to install the dependencies&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;pnpm run dev&lt;/code&gt; to run the web app&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;pnpm run build&lt;/code&gt; to build the web app&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Open your browser and visit the web app URL.&lt;/p&gt; 
&lt;h2&gt;Testing LLM Agents&lt;/h2&gt; 
&lt;p&gt;PentAGI includes a powerful utility called &lt;code&gt;ctester&lt;/code&gt; for testing and validating LLM agent capabilities. This tool helps ensure your LLM provider configurations work correctly with different agent types, allowing you to optimize model selection for each specific agent role.&lt;/p&gt; 
&lt;p&gt;The utility features parallel testing of multiple agents, detailed reporting, and flexible configuration options.&lt;/p&gt; 
&lt;h3&gt;Key Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Parallel Testing&lt;/strong&gt;: Tests multiple agents simultaneously for faster results&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Comprehensive Test Suite&lt;/strong&gt;: Evaluates basic completion, JSON responses, function calling, and penetration testing knowledge&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Detailed Reporting&lt;/strong&gt;: Generates markdown reports with success rates and performance metrics&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Flexible Configuration&lt;/strong&gt;: Test specific agents or test groups as needed&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Specialized Test Groups&lt;/strong&gt;: Includes domain-specific tests for cybersecurity and penetration testing scenarios&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Usage Scenarios&lt;/h3&gt; 
&lt;h4&gt;For Developers (with local Go environment)&lt;/h4&gt; 
&lt;p&gt;If you&#39;ve cloned the repository and have Go installed:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Default configuration with .env file
cd backend
go run cmd/ctester/*.go -verbose

# Custom provider configuration
go run cmd/ctester/*.go -config ../examples/configs/openrouter.provider.yml -verbose

# Generate a report file
go run cmd/ctester/*.go -config ../examples/configs/deepinfra.provider.yml -report ../test-report.md

# Test specific agent types only
go run cmd/ctester/*.go -agents simple,simple_json,primary_agent -verbose

# Test specific test groups only
go run cmd/ctester/*.go -groups basic,advanced -verbose
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;For Users (using Docker image)&lt;/h4&gt; 
&lt;p&gt;If you prefer to use the pre-built Docker image without setting up a development environment:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Using Docker to test with default environment
docker run --rm -v $(pwd)/.env:/opt/pentagi/.env vxcontrol/pentagi /opt/pentagi/bin/ctester -verbose

# Test with your custom provider configuration
docker run --rm \
  -v $(pwd)/.env:/opt/pentagi/.env \
  -v $(pwd)/my-config.yml:/opt/pentagi/config.yml \
  vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/config.yml -agents simple,primary_agent,coder -verbose

# Generate a detailed report
docker run --rm \
  -v $(pwd)/.env:/opt/pentagi/.env \
  -v $(pwd):/opt/pentagi/output \
  vxcontrol/pentagi /opt/pentagi/bin/ctester -report /opt/pentagi/output/report.md
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Using Pre-configured Providers&lt;/h4&gt; 
&lt;p&gt;The Docker image comes with built-in support for major providers (OpenAI, Anthropic, Gemini, Ollama) and pre-configured provider files for additional services (OpenRouter, OpenCode, Atlas, OrcaRouter, DeepInfra, DeepSeek, Moonshot, Novita, xAI):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Test with OpenRouter configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/openrouter.provider.yml

# Test with OpenCode Go plan configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/opencode.provider.yml

# Test with DeepInfra configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/deepinfra.provider.yml

# Test with DeepSeek configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -provider deepseek

# Test with GLM configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -provider glm

# Test with Kimi configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -provider kimi

# Test with Qwen configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -provider qwen

# Test with DeepSeek configuration file for custom provider
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/deepseek.provider.yml

# Test with Moonshot configuration file for custom provider
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/moonshot.provider.yml

# Test with Novita configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/novita.provider.yml

# Test with xAI configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/xai.provider.yml

# Test with OpenAI configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -type openai

# Test with Anthropic configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -type anthropic

# Test with Gemini configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -type gemini

# Test with AWS Bedrock configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -type bedrock

# Test with Custom OpenAI configuration
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/custom-openai.provider.yml

# Test with Ollama configuration (local inference)
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/ollama-llama318b.provider.yml

# Test with Ollama Qwen3 32B configuration (requires custom model creation)
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/ollama-qwen332b-fp16-tc.provider.yml

# Test with Ollama QwQ 32B configuration (requires custom model creation and 71.3GB VRAM)
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/ollama-qwq32b-fp16-tc.provider.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To use these configurations, your &lt;code&gt;.env&lt;/code&gt; file only needs to contain:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;LLM_SERVER_URL=https://openrouter.ai/api/v1      # or https://api.deepinfra.com/v1/openai or https://api.openai.com/v1 or https://opencode.ai/zen/go/v1 or https://api.novita.ai/openai or https://api.atlascloud.ai/v1 or https://api.orcarouter.ai/v1 or https://api.x.ai/v1
LLM_SERVER_KEY=your_api_key
LLM_SERVER_MODEL=                                # Leave empty, as models are specified in the config
LLM_SERVER_CONFIG_PATH=/opt/pentagi/conf/openrouter.provider.yml  # or deepinfra.provider.ymll or opencode.provider.ymll or custom-openai.provider.yml or novita.provider.yml or atlas.provider.yml or orcarouter.provider.yml or xai.provider.yml
LLM_SERVER_PROVIDER=                             # Provider name for LiteLLM proxy (e.g., openrouter, deepseek, moonshot, novita, opencode, orcarouter, xai)
LLM_SERVER_LEGACY_REASONING=false                # Controls reasoning format, for OpenAI must be true (default: false)
LLM_SERVER_PRESERVE_REASONING=false              # Preserve reasoning content in multi-turn conversations (required by Moonshot, default: false)

# For OpenAI (official API)
OPEN_AI_KEY=your_openai_api_key                  # Your OpenAI API key
OPEN_AI_SERVER_URL=https://api.openai.com/v1     # OpenAI API endpoint

# For Anthropic (Claude models)
ANTHROPIC_API_KEY=your_anthropic_api_key         # Your Anthropic API key
ANTHROPIC_SERVER_URL=https://api.anthropic.com/v1  # Anthropic API endpoint

# For Gemini (Google AI)
GEMINI_API_KEY=your_gemini_api_key               # Your Google AI API key
GEMINI_SERVER_URL=https://generativelanguage.googleapis.com  # Google AI API endpoint

# For AWS Bedrock (enterprise foundation models)
BEDROCK_REGION=us-east-1                         # AWS region for Bedrock service
# Authentication (choose one method, priority: DefaultAuth &amp;gt; BearerToken &amp;gt; AccessKey):
BEDROCK_DEFAULT_AUTH=false                       # Use AWS SDK credential chain (env vars, EC2 role, ~/.aws/credentials)
BEDROCK_BEARER_TOKEN=                            # Bearer token authentication (takes priority over static credentials)
BEDROCK_ACCESS_KEY_ID=your_aws_access_key        # AWS access key ID (static credentials)
BEDROCK_SECRET_ACCESS_KEY=your_aws_secret_key    # AWS secret access key (static credentials)
BEDROCK_SESSION_TOKEN=                           # AWS session token (optional, for temporary credentials with static auth)
BEDROCK_SERVER_URL=                              # Optional custom Bedrock endpoint (VPC endpoints, local testing)
BEDROCK_CONFIG_PATH=                             # Optional path to a custom YAML provider config (overrides built-in model/pricing definitions)

# For Ollama (local server or cloud)
OLLAMA_SERVER_URL=                               # Local: http://ollama-server:11434, Cloud: https://ollama.com
OLLAMA_SERVER_API_KEY=                           # Required for Ollama Cloud (https://ollama.com/settings/keys), leave empty for local
OLLAMA_SERVER_MODEL=
OLLAMA_SERVER_CONFIG_PATH=
OLLAMA_SERVER_PULL_MODELS_TIMEOUT=
OLLAMA_SERVER_PULL_MODELS_ENABLED=
OLLAMA_SERVER_LOAD_MODELS_ENABLED=

# For DeepSeek (Chinese AI with strong reasoning)
DEEPSEEK_API_KEY=                                # DeepSeek API key
DEEPSEEK_SERVER_URL=https://api.deepseek.com     # DeepSeek API endpoint
DEEPSEEK_PROVIDER=                               # Optional: LiteLLM prefix (e.g., &#39;deepseek&#39;)

# For GLM (Zhipu AI)
GLM_API_KEY=                                     # GLM API key
GLM_SERVER_URL=https://api.z.ai/api/paas/v4      # GLM API endpoint (international)
GLM_PROVIDER=                                    # Optional: LiteLLM prefix (e.g., &#39;zai&#39;)

# For Kimi (Moonshot AI)
KIMI_API_KEY=                                    # Kimi API key
KIMI_SERVER_URL=https://api.moonshot.ai/v1       # Kimi API endpoint (international)
KIMI_PROVIDER=                                   # Optional: LiteLLM prefix (e.g., &#39;moonshot&#39;)

# For Qwen (Alibaba Cloud DashScope)
QWEN_API_KEY=                                    # Qwen API key
QWEN_SERVER_URL=https://dashscope-us.aliyuncs.com/compatible-mode/v1  # Qwen API endpoint (US)
QWEN_PROVIDER=                                   # Optional: LiteLLM prefix (e.g., &#39;dashscope&#39;)

# For Ollama (local inference) use variables above
OLLAMA_SERVER_URL=http://localhost:11434
OLLAMA_SERVER_MODEL=llama3.1:8b-instruct-q8_0
OLLAMA_SERVER_CONFIG_PATH=/opt/pentagi/conf/ollama-llama318b.provider.yml
OLLAMA_SERVER_PULL_MODELS_ENABLED=false
OLLAMA_SERVER_LOAD_MODELS_ENABLED=false
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Using OpenAI with Unverified Organizations&lt;/h4&gt; 
&lt;p&gt;For OpenAI accounts with unverified organizations that don&#39;t have access to the latest reasoning models (o1, o3, o4-mini), you need to use a custom configuration.&lt;/p&gt; 
&lt;p&gt;To use OpenAI with unverified organization accounts, configure your &lt;code&gt;.env&lt;/code&gt; file as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;LLM_SERVER_URL=https://api.openai.com/v1
LLM_SERVER_KEY=your_openai_api_key
LLM_SERVER_MODEL=                                # Leave empty, models are specified in config
LLM_SERVER_CONFIG_PATH=/opt/pentagi/conf/custom-openai.provider.yml
LLM_SERVER_LEGACY_REASONING=true                 # Required for OpenAI reasoning format
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This configuration uses the pre-built &lt;code&gt;custom-openai.provider.yml&lt;/code&gt; file that maps all agent types to models available for unverified organizations, using &lt;code&gt;o3-mini&lt;/code&gt; instead of models like &lt;code&gt;o1&lt;/code&gt;, &lt;code&gt;o3&lt;/code&gt;, and &lt;code&gt;o4-mini&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;You can test this configuration using:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Test with custom OpenAI configuration for unverified accounts
docker exec -it pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/custom-openai.provider.yml
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;The &lt;code&gt;LLM_SERVER_LEGACY_REASONING=true&lt;/code&gt; setting is crucial for OpenAI compatibility as it ensures reasoning parameters are sent in the format expected by OpenAI&#39;s API.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h4&gt;Using LiteLLM Proxy&lt;/h4&gt; 
&lt;p&gt;When using LiteLLM proxy to access various LLM providers, model names are prefixed with the provider name (e.g., &lt;code&gt;moonshot/kimi-2.5&lt;/code&gt; instead of &lt;code&gt;kimi-2.5&lt;/code&gt;). To use the same provider configuration files with both direct API access and LiteLLM proxy, set the &lt;code&gt;LLM_SERVER_PROVIDER&lt;/code&gt; variable:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Direct access to Moonshot API
LLM_SERVER_URL=https://api.moonshot.ai/v1
LLM_SERVER_KEY=your_moonshot_api_key
LLM_SERVER_CONFIG_PATH=/opt/pentagi/conf/moonshot.provider.yml
LLM_SERVER_PROVIDER=                             # Empty for direct access

# Access via LiteLLM proxy
LLM_SERVER_URL=http://litellm-proxy:4000
LLM_SERVER_KEY=your_litellm_api_key
LLM_SERVER_CONFIG_PATH=/opt/pentagi/conf/moonshot.provider.yml
LLM_SERVER_PROVIDER=moonshot                     # Provider prefix for LiteLLM
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;With &lt;code&gt;LLM_SERVER_PROVIDER=moonshot&lt;/code&gt;, the system automatically prefixes all model names from the configuration file with &lt;code&gt;moonshot/&lt;/code&gt;, making them compatible with LiteLLM&#39;s model naming convention.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;LiteLLM Provider Name Mapping:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;When using LiteLLM proxy, set the corresponding &lt;code&gt;*_PROVIDER&lt;/code&gt; variable to enable model prefixing:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;deepseek&lt;/code&gt; - for DeepSeek models (&lt;code&gt;DEEPSEEK_PROVIDER=deepseek&lt;/code&gt; → &lt;code&gt;deepseek/deepseek-v4-flash&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;zai&lt;/code&gt; - for GLM models (&lt;code&gt;GLM_PROVIDER=zai&lt;/code&gt; → &lt;code&gt;zai/glm-4&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;moonshot&lt;/code&gt; - for Kimi models (&lt;code&gt;KIMI_PROVIDER=moonshot&lt;/code&gt; → &lt;code&gt;moonshot/kimi-k2.5&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;dashscope&lt;/code&gt; - for Qwen models (&lt;code&gt;QWEN_PROVIDER=dashscope&lt;/code&gt; → &lt;code&gt;dashscope/qwen-plus&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;openai&lt;/code&gt;, &lt;code&gt;anthropic&lt;/code&gt;, &lt;code&gt;gemini&lt;/code&gt; - for major cloud providers&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;opencode&lt;/code&gt; - for OpenCode Go plan&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;openrouter&lt;/code&gt; - for OpenRouter aggregator&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;orcarouter&lt;/code&gt; - for OrcaRouter aggregator&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;deepinfra&lt;/code&gt; - for DeepInfra hosting&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;novita&lt;/code&gt; - for Novita AI&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;xai&lt;/code&gt; - for xAI (&lt;code&gt;grok-*&lt;/code&gt; models)&lt;/li&gt; 
 &lt;li&gt;Any other provider name configured in your LiteLLM instance&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Example with LiteLLM:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Use DeepSeek models via LiteLLM proxy with model prefixing
DEEPSEEK_API_KEY=your_litellm_proxy_key
DEEPSEEK_SERVER_URL=http://litellm-proxy:4000
DEEPSEEK_PROVIDER=deepseek  # Models become deepseek/deepseek-v4-flash, deepseek/deepseek-v4-pro for LiteLLM

# Direct DeepSeek API usage (no prefix needed)
DEEPSEEK_API_KEY=your_deepseek_api_key
DEEPSEEK_SERVER_URL=https://api.deepseek.com
# Leave DEEPSEEK_PROVIDER empty
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This approach allows you to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Use the same configuration files for both direct and proxied access&lt;/li&gt; 
 &lt;li&gt;Switch between providers without modifying configuration files&lt;/li&gt; 
 &lt;li&gt;Easily test different routing strategies with LiteLLM&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Running Tests in a Production Environment&lt;/h4&gt; 
&lt;p&gt;If you already have a running PentAGI container and want to test the current configuration:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Run ctester in an existing container using current environment variables
docker exec -it pentagi /opt/pentagi/bin/ctester -verbose

# Test specific agent types with deterministic ordering
docker exec -it pentagi /opt/pentagi/bin/ctester -agents simple,primary_agent,pentester -groups basic,knowledge -verbose

# Generate a report file inside the container
docker exec -it pentagi /opt/pentagi/bin/ctester -report /opt/pentagi/data/agent-test-report.md

# Access the report from the host
docker cp pentagi:/opt/pentagi/data/agent-test-report.md ./
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Command-line Options&lt;/h3&gt; 
&lt;p&gt;The utility accepts several options:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;-env &amp;lt;path&amp;gt;&lt;/code&gt; - Path to environment file (default: &lt;code&gt;.env&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-type &amp;lt;provider&amp;gt;&lt;/code&gt; - Provider type: &lt;code&gt;custom&lt;/code&gt;, &lt;code&gt;openai&lt;/code&gt;, &lt;code&gt;anthropic&lt;/code&gt;, &lt;code&gt;ollama&lt;/code&gt;, &lt;code&gt;bedrock&lt;/code&gt;, &lt;code&gt;gemini&lt;/code&gt; (default: &lt;code&gt;custom&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-config &amp;lt;path&amp;gt;&lt;/code&gt; - Path to custom provider config (default: from &lt;code&gt;LLM_SERVER_CONFIG_PATH&lt;/code&gt; env variable)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-tests &amp;lt;path&amp;gt;&lt;/code&gt; - Path to custom tests YAML file (optional)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-report &amp;lt;path&amp;gt;&lt;/code&gt; - Path to write the report file (optional)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-agents &amp;lt;list&amp;gt;&lt;/code&gt; - Comma-separated list of agent types to test (default: &lt;code&gt;all&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-groups &amp;lt;list&amp;gt;&lt;/code&gt; - Comma-separated list of test groups to run (default: &lt;code&gt;all&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-verbose&lt;/code&gt; - Enable verbose output with detailed test results for each agent&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Available Agent Types&lt;/h3&gt; 
&lt;p&gt;Agents are tested in the following deterministic order:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;simple&lt;/strong&gt; - Basic completion tasks&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;simple_json&lt;/strong&gt; - JSON-structured responses&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;primary_agent&lt;/strong&gt; - Main reasoning agent&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;assistant&lt;/strong&gt; - Interactive assistant mode&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;generator&lt;/strong&gt; - Content generation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;refiner&lt;/strong&gt; - Content refinement and improvement&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;adviser&lt;/strong&gt; - Expert advice and consultation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;reflector&lt;/strong&gt; - Self-reflection and analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;searcher&lt;/strong&gt; - Information gathering and search&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;enricher&lt;/strong&gt; - Data enrichment and expansion&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;coder&lt;/strong&gt; - Code generation and analysis&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;installer&lt;/strong&gt; - Installation and setup tasks&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;pentester&lt;/strong&gt; - Penetration testing and security assessment&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Available Test Groups&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;basic&lt;/strong&gt; - Fundamental completion and prompt response tests&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;advanced&lt;/strong&gt; - Complex reasoning and function calling tests&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;json&lt;/strong&gt; - JSON format validation and structure tests (specifically designed for &lt;code&gt;simple_json&lt;/code&gt; agent)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;knowledge&lt;/strong&gt; - Domain-specific cybersecurity and penetration testing knowledge tests&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The &lt;code&gt;json&lt;/code&gt; test group is specifically designed for the &lt;code&gt;simple_json&lt;/code&gt; agent type, while all other agents are tested with &lt;code&gt;basic&lt;/code&gt;, &lt;code&gt;advanced&lt;/code&gt;, and &lt;code&gt;knowledge&lt;/code&gt; groups. This specialization ensures optimal testing coverage for each agent&#39;s intended purpose.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Example Provider Configuration&lt;/h3&gt; 
&lt;p&gt;Provider configuration defines which models to use for different agent types:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;simple:
  model: &quot;provider/model-name&quot;
  temperature: 0.7
  top_p: 0.95
  n: 1
  max_tokens: 4000

simple_json:
  model: &quot;provider/model-name&quot;
  temperature: 0.7
  top_p: 1.0
  n: 1
  max_tokens: 4000
  json: true

# ... other agent types ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Optimization Workflow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Create a baseline&lt;/strong&gt;: Run tests with default configuration to establish benchmark performance&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Analyze agent-specific performance&lt;/strong&gt;: Review the deterministic agent ordering to identify underperforming agents&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Test specialized configurations&lt;/strong&gt;: Experiment with different models for each agent type using provider-specific configs&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Focus on domain knowledge&lt;/strong&gt;: Pay special attention to knowledge group tests for cybersecurity expertise&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Validate function calling&lt;/strong&gt;: Ensure tool-based tests pass consistently for critical agent types&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Compare results&lt;/strong&gt;: Look for the best success rate and performance across all test groups&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Deploy optimal configuration&lt;/strong&gt;: Use in production with your optimized setup&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This tool helps ensure your AI agents are using the most effective models for their specific tasks, improving reliability while optimizing costs.&lt;/p&gt; 
&lt;h2&gt;Embedding Configuration and Testing&lt;/h2&gt; 
&lt;p&gt;PentAGI uses vector embeddings for semantic search, knowledge storage, and memory management. The system supports multiple embedding providers that can be configured according to your needs and preferences.&lt;/p&gt; 
&lt;h3&gt;Supported Embedding Providers&lt;/h3&gt; 
&lt;p&gt;PentAGI supports the following embedding providers:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;OpenAI&lt;/strong&gt; (default): Uses OpenAI&#39;s text embedding models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Ollama&lt;/strong&gt;: Local embedding model through Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mistral&lt;/strong&gt;: Mistral AI&#39;s embedding models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Jina&lt;/strong&gt;: Jina AI&#39;s embedding service&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;HuggingFace&lt;/strong&gt;: Models from HuggingFace&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GoogleAI&lt;/strong&gt;: Google&#39;s embedding models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;VoyageAI&lt;/strong&gt;: VoyageAI&#39;s embedding models&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;OpenAI-compatible third parties&lt;/strong&gt;: any provider exposing OpenAI&#39;s &lt;code&gt;/embeddings&lt;/code&gt; API can be plugged in via &lt;code&gt;EMBEDDING_PROVIDER=openai&lt;/code&gt; with a custom &lt;code&gt;EMBEDDING_URL&lt;/code&gt;. For example, &lt;strong&gt;Qwen DashScope&lt;/strong&gt; offers &lt;code&gt;text-embedding-v4&lt;/code&gt; through the &lt;code&gt;/compatible-mode/v1&lt;/code&gt; endpoint (International and Chinese Mainland regions only — the US region does not expose embeddings). See the &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#alternative-integrations&quot;&gt;Qwen Alternative Integrations&lt;/a&gt; subsection for the full configuration snippet.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Embedding Provider Configuration&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;h3&gt;Environment Variables&lt;/h3&gt; 
 &lt;p&gt;To configure the embedding provider, set the following environment variables in your &lt;code&gt;.env&lt;/code&gt; file:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Primary embedding configuration
EMBEDDING_PROVIDER=openai       # Provider type (openai, ollama, mistral, jina, huggingface, googleai, voyageai)
EMBEDDING_MODEL=text-embedding-3-small  # Model name to use
EMBEDDING_URL=                  # Optional custom API endpoint
EMBEDDING_KEY=                  # API key for the provider (if required)
EMBEDDING_BATCH_SIZE=100        # Number of documents to process in a batch
EMBEDDING_STRIP_NEW_LINES=true  # Whether to remove new lines from text before embedding
EMBEDDING_MAX_TEXT_BYTES=8192   # Max bytes of text sent to embedding model per document (byte proxy for token limit)

# Advanced settings
PROXY_URL=                      # Optional proxy for all API calls
HTTP_CLIENT_TIMEOUT=600         # Timeout in seconds for external API calls (default: 600, 0 = no timeout)
TERMINAL_TOOL_TIMEOUT=1200      # Default timeout in seconds for terminal tool commands when timeout=0 or negative (range: 1–10800; values &amp;lt;= 0 or above 10800 are clamped to 10800 = 3 hours)

# SSL/TLS Certificate Configuration (for external communication with LLM backends and tool servers)
EXTERNAL_SSL_CA_PATH=           # Path to custom CA certificate file (PEM format) inside the container
                                # Must point to /opt/pentagi/ssl/ directory (e.g., /opt/pentagi/ssl/ca-bundle.pem)
EXTERNAL_SSL_INSECURE=false     # Skip certificate verification (use only for testing)
&lt;/code&gt;&lt;/pre&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;b&gt;How to Add Custom CA Certificates&lt;/b&gt; (click to expand)&lt;/summary&gt; 
  &lt;p&gt;If you see this error: &lt;code&gt;tls: failed to verify certificate: x509: certificate signed by unknown authority&lt;/code&gt;&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Get your CA certificate bundle in PEM format (can contain multiple certificates)&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Place the file in the SSL directory on your host machine:&lt;/p&gt; 
  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Default location (if PENTAGI_SSL_DIR is not set)
cp ca-bundle.pem ./pentagi-ssl/

# Or custom location (if using PENTAGI_SSL_DIR in docker-compose.yml)
cp ca-bundle.pem /path/to/your/ssl/dir/
&lt;/code&gt;&lt;/pre&gt; 
  &lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Set the path in &lt;code&gt;.env&lt;/code&gt; file (path must be inside the container):&lt;/p&gt; 
  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# The volume pentagi-ssl is mounted to /opt/pentagi/ssl inside the container
EXTERNAL_SSL_CA_PATH=/opt/pentagi/ssl/ca-bundle.pem
EXTERNAL_SSL_INSECURE=false
&lt;/code&gt;&lt;/pre&gt; 
  &lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Restart PentAGI:&lt;/p&gt; 
  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose restart pentagi
&lt;/code&gt;&lt;/pre&gt; 
  &lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;The &lt;code&gt;pentagi-ssl&lt;/code&gt; volume is mounted to &lt;code&gt;/opt/pentagi/ssl&lt;/code&gt; inside the container&lt;/li&gt; 
   &lt;li&gt;You can change host directory using &lt;code&gt;PENTAGI_SSL_DIR&lt;/code&gt; variable in docker-compose.yml&lt;/li&gt; 
   &lt;li&gt;File supports multiple certificates and intermediate CAs in one PEM file&lt;/li&gt; 
   &lt;li&gt;Use &lt;code&gt;EXTERNAL_SSL_INSECURE=true&lt;/code&gt; only for testing (not recommended for production)&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
 &lt;h3&gt;Provider-Specific Limitations&lt;/h3&gt; 
 &lt;p&gt;Each provider has specific limitations and supported features:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;OpenAI&lt;/strong&gt;: Supports all configuration options&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Ollama&lt;/strong&gt;: Does not support &lt;code&gt;EMBEDDING_KEY&lt;/code&gt; as it uses local models&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Mistral&lt;/strong&gt;: Does not support &lt;code&gt;EMBEDDING_MODEL&lt;/code&gt; or custom HTTP client&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Jina&lt;/strong&gt;: Does not support custom HTTP client&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;HuggingFace&lt;/strong&gt;: Requires &lt;code&gt;EMBEDDING_KEY&lt;/code&gt; and supports all other options&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;GoogleAI&lt;/strong&gt;: Does not support &lt;code&gt;EMBEDDING_URL&lt;/code&gt;, requires &lt;code&gt;EMBEDDING_KEY&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;VoyageAI&lt;/strong&gt;: Supports all configuration options&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;If &lt;code&gt;EMBEDDING_URL&lt;/code&gt; and &lt;code&gt;EMBEDDING_KEY&lt;/code&gt; are not specified, the system will attempt to use the corresponding LLM provider settings (e.g., &lt;code&gt;OPEN_AI_KEY&lt;/code&gt; when &lt;code&gt;EMBEDDING_PROVIDER=openai&lt;/code&gt;).&lt;/p&gt; 
 &lt;h3&gt;Why Consistent Embedding Providers Matter&lt;/h3&gt; 
 &lt;p&gt;It&#39;s crucial to use the same embedding provider consistently because:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;strong&gt;Vector Compatibility&lt;/strong&gt;: Different providers produce vectors with different dimensions and mathematical properties&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Semantic Consistency&lt;/strong&gt;: Changing providers can break semantic similarity between previously embedded documents&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Memory Corruption&lt;/strong&gt;: Mixed embeddings can lead to poor search results and broken knowledge base functionality&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;If you change your embedding provider, you should flush and reindex your entire knowledge base (see &lt;code&gt;etester&lt;/code&gt; utility below).&lt;/p&gt; 
&lt;/details&gt; 
&lt;h3&gt;Embedding Tester Utility (etester)&lt;/h3&gt; 
&lt;p&gt;PentAGI includes a specialized &lt;code&gt;etester&lt;/code&gt; utility for testing, managing, and debugging embedding functionality. This tool is essential for diagnosing and resolving issues related to vector embeddings and knowledge storage.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Etester Commands&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Test embedding provider and database connection
cd backend
go run cmd/etester/main.go test -verbose

# Show statistics about the embedding database
go run cmd/etester/main.go info

# Delete all documents from the embedding database (use with caution!)
go run cmd/etester/main.go flush

# Recalculate embeddings for all documents (after changing provider)
go run cmd/etester/main.go reindex

# Search for documents in the embedding database
go run cmd/etester/main.go search -query &quot;How to install PostgreSQL&quot; -limit 5
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Using Docker&lt;/h3&gt; 
 &lt;p&gt;If you&#39;re running PentAGI in Docker, you can use etester from within the container:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Test embedding provider
docker exec -it pentagi /opt/pentagi/bin/etester test

# Show detailed database information
docker exec -it pentagi /opt/pentagi/bin/etester info -verbose
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Advanced Search Options&lt;/h3&gt; 
 &lt;p&gt;The &lt;code&gt;search&lt;/code&gt; command supports various filters to narrow down results:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Filter by document type
docker exec -it pentagi /opt/pentagi/bin/etester search -query &quot;Security vulnerability&quot; -doc_type guide -threshold 0.8

# Filter by flow ID
docker exec -it pentagi /opt/pentagi/bin/etester search -query &quot;Code examples&quot; -doc_type code -flow_id 42

# All available search options
docker exec -it pentagi /opt/pentagi/bin/etester search -help
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Available search parameters:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;-query STRING&lt;/code&gt;: Search query text (required)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;-doc_type STRING&lt;/code&gt;: Filter by document type (answer, memory, guide, code)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;-flow_id NUMBER&lt;/code&gt;: Filter by flow ID (positive number)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;-answer_type STRING&lt;/code&gt;: Filter by answer type (guide, vulnerability, code, tool, other)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;-guide_type STRING&lt;/code&gt;: Filter by guide type (install, configure, use, pentest, development, other)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;-limit NUMBER&lt;/code&gt;: Maximum number of results (default: 3)&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;-threshold NUMBER&lt;/code&gt;: Similarity threshold (0.0-1.0, default: 0.7)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Memory Lifecycle Across Flows&lt;/h3&gt; 
 &lt;p&gt;PentAGI stores several kinds of vector documents, and they serve different purposes:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;memory&lt;/code&gt; captures flow-specific execution history such as tool results and agent observations&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;guide&lt;/code&gt;, &lt;code&gt;answer&lt;/code&gt;, and &lt;code&gt;code&lt;/code&gt; are intended for reusable knowledge that can help future runs&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;If you want to inspect what happened in one engagement, search the vector store with the related &lt;code&gt;flow_id&lt;/code&gt;. If you want knowledge to survive beyond a single run, store the durable result explicitly as a &lt;code&gt;guide&lt;/code&gt;, &lt;code&gt;answer&lt;/code&gt;, or &lt;code&gt;code&lt;/code&gt; document instead of relying on execution memory alone.&lt;/p&gt; 
 &lt;p&gt;For example, if a target has recurring setup notes, authentication quirks, or target-specific testing methodology, instruct the agent to save that information as a &lt;code&gt;guide&lt;/code&gt; and search for it at the beginning of the next engagement. This is the safest current workflow when you want a new flow to start with reusable context.&lt;/p&gt; 
 &lt;p&gt;Flow deletion removes the flow from normal queries through PentAGI&#39;s soft-delete mechanism, so reusable knowledge should be treated as a separate concern from per-flow execution history. If you enable the optional Graphiti knowledge graph described earlier in this README, treat its current search context as scoped to the active flow or engagement unless you explicitly build a separate cross-flow reuse workflow.&lt;/p&gt; 
 &lt;h3&gt;Common Troubleshooting Scenarios&lt;/h3&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;strong&gt;After changing embedding provider&lt;/strong&gt;: Always run &lt;code&gt;flush&lt;/code&gt; or &lt;code&gt;reindex&lt;/code&gt; to ensure consistency&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Poor search results&lt;/strong&gt;: Try adjusting the similarity threshold or check if embeddings are correctly generated&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Database connection issues&lt;/strong&gt;: Verify PostgreSQL is running with pgvector extension installed&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Missing API keys&lt;/strong&gt;: Check environment variables for your chosen embedding provider&lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/details&gt; 
&lt;h3&gt;Troubleshooting: Flow Stalls or Hangs Without Progress&lt;/h3&gt; 
&lt;p&gt;If a flow starts but then appears to wait indefinitely with no subtasks progressing, a common cause is an embedding provider that is misconfigured or unreachable. PentAGI uses the embedding provider to store and search vector memory while a flow runs, so embedding calls that fail or hang can leave a flow waiting instead of advancing.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;1. Check the container logs first.&lt;/strong&gt; Embedding errors surface in the PentAGI logs:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker logs pentagi
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Look for embedding-related failures such as authentication errors (401/403), wrong-model or not-found errors (404), connection timeouts, or TLS certificate errors. These point at the embedding provider configuration rather than at the flow itself.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2. Validate the provider with etester.&lt;/strong&gt; The &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#embedding-tester-utility-etester&quot;&gt;Embedding Tester Utility (etester)&lt;/a&gt; checks both the embedding provider and the database connection without starting a flow:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker exec -it pentagi /opt/pentagi/bin/etester test -verbose
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A failing &lt;code&gt;test&lt;/code&gt; confirms the problem is in the embedding configuration rather than in the flow.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;3. Verify the configuration.&lt;/strong&gt; Check the following in your &lt;code&gt;.env&lt;/code&gt; file against the &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#supported-embedding-providers&quot;&gt;Supported Embedding Providers&lt;/a&gt; list and each provider&#39;s documented limitations:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;EMBEDDING_PROVIDER&lt;/code&gt; is one of the supported providers (default &lt;code&gt;openai&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;EMBEDDING_MODEL&lt;/code&gt; is a valid model name for that provider.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;EMBEDDING_URL&lt;/code&gt; and &lt;code&gt;EMBEDDING_KEY&lt;/code&gt; are correct for the provider. If both are left empty, PentAGI falls back to the matching LLM provider settings (for example &lt;code&gt;OPEN_AI_KEY&lt;/code&gt; and &lt;code&gt;OPEN_AI_SERVER_URL&lt;/code&gt; when &lt;code&gt;EMBEDDING_PROVIDER=openai&lt;/code&gt;), so a missing or wrong key there can break embeddings too.&lt;/li&gt; 
 &lt;li&gt;The endpoint is reachable from inside the container. If outbound calls go through a proxy, confirm &lt;code&gt;PROXY_URL&lt;/code&gt; is set; if calls hang rather than fail quickly, &lt;code&gt;HTTP_CLIENT_TIMEOUT&lt;/code&gt; controls how long PentAGI waits on the provider before giving up.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Changing provider?&lt;/strong&gt; If you switch embedding providers after data has already been indexed, run &lt;code&gt;flush&lt;/code&gt; or &lt;code&gt;reindex&lt;/code&gt; with etester so old and new vectors are not mixed. See &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/#why-consistent-embedding-providers-matter&quot;&gt;Why Consistent Embedding Providers Matter&lt;/a&gt; above.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;Function Testing with ftester&lt;/h2&gt; 
&lt;p&gt;PentAGI includes a versatile utility called &lt;code&gt;ftester&lt;/code&gt; for debugging, testing, and developing specific functions and AI agent behaviors. While &lt;code&gt;ctester&lt;/code&gt; focuses on testing LLM model capabilities, &lt;code&gt;ftester&lt;/code&gt; allows you to directly invoke individual system functions and AI agent components with precise control over execution context.&lt;/p&gt; 
&lt;h3&gt;Key Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Direct Function Access&lt;/strong&gt;: Test individual functions without running the entire system&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mock Mode&lt;/strong&gt;: Test functions without a live PentAGI deployment using built-in mocks&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Interactive Input&lt;/strong&gt;: Fill function arguments interactively for exploratory testing&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Detailed Output&lt;/strong&gt;: Color-coded terminal output with formatted responses and errors&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Context-Aware Testing&lt;/strong&gt;: Debug AI agents within the context of specific flows, tasks, and subtasks&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Observability Integration&lt;/strong&gt;: All function calls are logged to Langfuse and Observability stack&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Usage Modes&lt;/h3&gt; 
&lt;h4&gt;Command Line Arguments&lt;/h4&gt; 
&lt;p&gt;Run ftester with specific function and arguments directly from the command line:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Basic usage with mock mode
cd backend
go run cmd/ftester/main.go [function_name] -[arg1] [value1] -[arg2] [value2]

# Example: Test terminal command in mock mode
go run cmd/ftester/main.go terminal -command &quot;ls -la&quot; -message &quot;List files&quot;

# Using a real flow context
go run cmd/ftester/main.go -flow 123 terminal -command &quot;whoami&quot; -message &quot;Check user&quot;

# Testing AI agent in specific task/subtask context
go run cmd/ftester/main.go -flow 123 -task 456 -subtask 789 pentester -message &quot;Find vulnerabilities&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Interactive Mode&lt;/h4&gt; 
&lt;p&gt;Run ftester without arguments for a guided interactive experience:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Start interactive mode
go run cmd/ftester/main.go [function_name]

# For example, to interactively fill browser tool arguments
go run cmd/ftester/main.go browser
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Available Functions&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;h3&gt;Environment Functions&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;terminal&lt;/strong&gt;: Execute commands in a container and return the output&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;file&lt;/strong&gt;: Perform file operations (read, write, list) in a container&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Search Functions&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;browser&lt;/strong&gt;: Access websites and capture screenshots&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;web_search&lt;/strong&gt;: Unified search orchestrator that agents actually call — pass a &lt;code&gt;query&lt;/code&gt; and a &lt;code&gt;mode&lt;/code&gt; (&lt;code&gt;links&lt;/code&gt;, &lt;code&gt;answer&lt;/code&gt;, &lt;code&gt;research&lt;/code&gt;, &lt;code&gt;exploit&lt;/code&gt;) and it auto-selects, retries, and falls back across the engines below, so you never name an engine explicitly&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;google&lt;/strong&gt;: Search the web using Google Custom Search&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;duckduckgo&lt;/strong&gt;: Search the web using DuckDuckGo&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;tavily&lt;/strong&gt;: Search using Tavily AI search engine&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;firecrawl&lt;/strong&gt;: Search using Firecrawl with main-content markdown scraping&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;traversaal&lt;/strong&gt;: Search using Traversaal AI search engine&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;perplexity&lt;/strong&gt;: Search using Perplexity AI&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;sploitus&lt;/strong&gt;: Search for security exploits, vulnerabilities (CVEs), and pentesting tools&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;searxng&lt;/strong&gt;: Search using Searxng meta search engine (aggregates results from multiple engines)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;internal&lt;/strong&gt; &lt;em&gt;(ftester-only debug function, not an agent tool)&lt;/em&gt;: Opt-in browser-analytics fallback engine that discovers links, scrapes each page, and summarizes the result; requires &lt;code&gt;WEB_SEARCH_INTERNAL_ENABLED=true&lt;/code&gt;, a configured scraper, and at least one available link engine&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Vector Database Functions&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;search_in_memory&lt;/strong&gt;: Search for information in vector database&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;search_guide&lt;/strong&gt;: Find guidance documents in vector database&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;search_answer&lt;/strong&gt;: Find answers to questions in vector database&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;search_code&lt;/strong&gt;: Find code examples in vector database&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;AI Agent Functions&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;advice&lt;/strong&gt;: Get expert advice from an AI agent&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;coder&lt;/strong&gt;: Request code generation or modification&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;maintenance&lt;/strong&gt;: Run system maintenance tasks&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;memorist&lt;/strong&gt;: Store and organize information in vector database&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;pentester&lt;/strong&gt;: Perform security tests and vulnerability analysis&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;search&lt;/strong&gt;: Complex search across multiple sources&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Utility Functions&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;describe&lt;/strong&gt;: Show information about flows, tasks, and subtasks&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Debugging Flow Context&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;p&gt;The &lt;code&gt;describe&lt;/code&gt; function provides detailed information about tasks and subtasks within a flow. This is particularly useful for diagnosing issues when PentAGI encounters problems or gets stuck.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# List all flows in the system
go run cmd/ftester/main.go describe

# Show all tasks and subtasks for a specific flow
go run cmd/ftester/main.go -flow 123 describe

# Show detailed information for a specific task
go run cmd/ftester/main.go -flow 123 -task 456 describe

# Show detailed information for a specific subtask
go run cmd/ftester/main.go -flow 123 -task 456 -subtask 789 describe

# Show verbose output with full descriptions and results
go run cmd/ftester/main.go -flow 123 describe -verbose
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;This function allows you to identify the exact point where a flow might be stuck and resume processing by directly invoking the appropriate agent function.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Function Help and Discovery&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;p&gt;Each function has a help mode that shows available parameters:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Get help for a specific function
go run cmd/ftester/main.go [function_name] -help

# Examples:
go run cmd/ftester/main.go terminal -help
go run cmd/ftester/main.go browser -help
go run cmd/ftester/main.go describe -help
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;You can also run ftester without arguments to see a list of all available functions:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go run cmd/ftester/main.go
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Output Format&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;p&gt;The &lt;code&gt;ftester&lt;/code&gt; utility uses color-coded output to make interpretation easier:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Blue headers&lt;/strong&gt;: Section titles and key names&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Cyan [INFO]&lt;/strong&gt;: General information messages&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Green [SUCCESS]&lt;/strong&gt;: Successful operations&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Red [ERROR]&lt;/strong&gt;: Error messages&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Yellow [WARNING]&lt;/strong&gt;: Warning messages&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Yellow [MOCK]&lt;/strong&gt;: Indicates mock mode operation&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Magenta values&lt;/strong&gt;: Function arguments and results&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;JSON and Markdown responses are automatically formatted for readability.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Advanced Usage Scenarios&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;h3&gt;Debugging Stuck AI Flows&lt;/h3&gt; 
 &lt;p&gt;When PentAGI gets stuck in a flow:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Pause the flow through the UI&lt;/li&gt; 
  &lt;li&gt;Use &lt;code&gt;describe&lt;/code&gt; to identify the current task and subtask&lt;/li&gt; 
  &lt;li&gt;Directly invoke the agent function with the same task/subtask IDs&lt;/li&gt; 
  &lt;li&gt;Examine the detailed output to identify the issue&lt;/li&gt; 
  &lt;li&gt;Resume the flow or manually intervene as needed&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;h3&gt;Testing Environment Variables&lt;/h3&gt; 
 &lt;p&gt;Verify that API keys and external services are configured correctly:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Test Google search API configuration
go run cmd/ftester/main.go google -query &quot;pentesting tools&quot;

# Test browser access to external websites
go run cmd/ftester/main.go browser -url &quot;https://example.com&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Developing New AI Agent Behaviors&lt;/h3&gt; 
 &lt;p&gt;When developing new prompt templates or agent behaviors:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Create a test flow in the UI&lt;/li&gt; 
  &lt;li&gt;Use ftester to directly invoke the agent with different prompts&lt;/li&gt; 
  &lt;li&gt;Observe responses and adjust prompts accordingly&lt;/li&gt; 
  &lt;li&gt;Check Langfuse for detailed traces of all function calls&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;h3&gt;Verifying Docker Container Setup&lt;/h3&gt; 
 &lt;p&gt;Ensure containers are properly configured:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go run cmd/ftester/main.go -flow 123 terminal -command &quot;env | grep -i proxy&quot; -message &quot;Check proxy settings&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Docker Container Usage&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;p&gt;If you have PentAGI running in Docker, you can use ftester from within the container:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Run ftester inside the running PentAGI container
docker exec -it pentagi /opt/pentagi/bin/ftester [arguments]

# Examples:
docker exec -it pentagi /opt/pentagi/bin/ftester -flow 123 describe
docker exec -it pentagi /opt/pentagi/bin/ftester -flow 123 terminal -command &quot;ps aux&quot; -message &quot;List processes&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;This is particularly useful for production deployments where you don&#39;t have a local development environment.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Integration with Observability Tools&lt;/b&gt; (click to expand)&lt;/summary&gt; 
 &lt;p&gt;All function calls made through ftester are logged to:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;strong&gt;Langfuse&lt;/strong&gt;: Captures the entire AI agent interaction chain, including prompts, responses, and function calls&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;OpenTelemetry&lt;/strong&gt;: Records metrics, traces, and logs for system performance analysis&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Terminal Output&lt;/strong&gt;: Provides immediate feedback on function execution&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;To access detailed logs:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Check Langfuse UI for AI agent traces (typically at &lt;code&gt;http://localhost:4000&lt;/code&gt;)&lt;/li&gt; 
  &lt;li&gt;Use Grafana dashboards for system metrics (typically at &lt;code&gt;http://localhost:3000&lt;/code&gt;)&lt;/li&gt; 
  &lt;li&gt;Examine terminal output for immediate function results and errors&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h3&gt;Command-line Options&lt;/h3&gt; 
&lt;p&gt;The main utility accepts several options:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;-env &amp;lt;path&amp;gt;&lt;/code&gt; - Path to environment file (optional, default: &lt;code&gt;.env&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-provider &amp;lt;type&amp;gt;&lt;/code&gt; - Provider type to use (default: &lt;code&gt;custom&lt;/code&gt;, options: &lt;code&gt;openai&lt;/code&gt;, &lt;code&gt;anthropic&lt;/code&gt;, &lt;code&gt;gemini&lt;/code&gt;, &lt;code&gt;bedrock&lt;/code&gt;, &lt;code&gt;ollama&lt;/code&gt;, &lt;code&gt;deepseek&lt;/code&gt;, &lt;code&gt;glm&lt;/code&gt;, &lt;code&gt;kimi&lt;/code&gt;, &lt;code&gt;qwen&lt;/code&gt;, &lt;code&gt;minimax&lt;/code&gt;, &lt;code&gt;custom&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-flow &amp;lt;id&amp;gt;&lt;/code&gt; - Flow ID for testing functions that require it (0 means using mocks, default: &lt;code&gt;0&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-user &amp;lt;id&amp;gt;&lt;/code&gt; - User ID for testing functions that require it (default: &lt;code&gt;0&lt;/code&gt;; &lt;code&gt;1&lt;/code&gt; is the default admin user)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-task &amp;lt;id&amp;gt;&lt;/code&gt; - Task ID for agent context (optional)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-subtask &amp;lt;id&amp;gt;&lt;/code&gt; - Subtask ID for agent context (optional)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Function-specific arguments are passed after the function name using &lt;code&gt;-name value&lt;/code&gt; format.&lt;/p&gt; 
&lt;h3&gt;Pentesting Prompt Methodology&lt;/h3&gt; 
&lt;p&gt;When refining prompts for offensive security work, give the agent a clear methodology instead of a flat list of payloads:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Start with explicit scope, authorization, and success criteria&lt;/li&gt; 
 &lt;li&gt;Map the application first: roles, routes, parameters, uploads, integrations, and trust boundaries&lt;/li&gt; 
 &lt;li&gt;Prioritize attack surfaces systematically instead of testing everything at once&lt;/li&gt; 
 &lt;li&gt;Validate findings with reproducible evidence before escalating to deeper exploitation&lt;/li&gt; 
 &lt;li&gt;Finish with report-ready notes that capture impact, prerequisites, and next steps&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;For PentAGI-specific prompt guidance, see &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/backend/docs/prompt_engineering_pentagi.md&quot;&gt;&lt;code&gt;backend/docs/prompt_engineering_pentagi.md&lt;/code&gt;&lt;/a&gt;. For a practical starting point, reuse and adapt &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/examples/prompts/base_web_pentest.md&quot;&gt;&lt;code&gt;examples/prompts/base_web_pentest.md&lt;/code&gt;&lt;/a&gt; to match the target application, technology stack, and engagement scope.&lt;/p&gt; 
&lt;h2&gt;Building&lt;/h2&gt; 
&lt;h3&gt;Building Docker Image&lt;/h3&gt; 
&lt;p&gt;The Docker build process automatically embeds version information from git tags. To properly version your build, use the provided scripts:&lt;/p&gt; 
&lt;h4&gt;Linux/macOS&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Load version variables
source ./scripts/version.sh

# Standard build
docker build \
  --build-arg PACKAGE_VER=$PACKAGE_VER \
  --build-arg PACKAGE_REV=$PACKAGE_REV \
  -t pentagi:$PACKAGE_VER .

# Multi-platform build
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --build-arg PACKAGE_VER=$PACKAGE_VER \
  --build-arg PACKAGE_REV=$PACKAGE_REV \
  -t pentagi:$PACKAGE_VER .

# Build and push
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --build-arg PACKAGE_VER=$PACKAGE_VER \
  --build-arg PACKAGE_REV=$PACKAGE_REV \
  -t myregistry/pentagi:$PACKAGE_VER \
  --push .
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Windows (PowerShell)&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# Load version variables
. .\scripts\version.ps1

# Standard build
docker build `
  --build-arg PACKAGE_VER=$env:PACKAGE_VER `
  --build-arg PACKAGE_REV=$env:PACKAGE_REV `
  -t pentagi:$env:PACKAGE_VER .

# Multi-platform build
docker buildx build `
  --platform linux/amd64,linux/arm64 `
  --build-arg PACKAGE_VER=$env:PACKAGE_VER `
  --build-arg PACKAGE_REV=$env:PACKAGE_REV `
  -t pentagi:$env:PACKAGE_VER .
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Quick build without version&lt;/h4&gt; 
&lt;p&gt;For development builds without version tracking:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker build -t pentagi:dev .
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;The build scripts automatically determine version from git tags&lt;/li&gt; 
  &lt;li&gt;Release builds (on tag commit) have no revision suffix&lt;/li&gt; 
  &lt;li&gt;Development builds (after tag) include commit hash as revision (e.g., &lt;code&gt;1.1.0-bc6e800&lt;/code&gt;)&lt;/li&gt; 
  &lt;li&gt;To use the built image locally, update the image name in &lt;code&gt;docker-compose.yml&lt;/code&gt; or use the &lt;code&gt;build&lt;/code&gt; option&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;p&gt;This project is made possible thanks to the following research and developments:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://lilianweng.github.io/posts/2023-06-23-agent&quot;&gt;Emerging Architectures for LLM Applications&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2403.08299&quot;&gt;A Survey of Autonomous LLM Agents&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/semanser/codel&quot;&gt;Codel&lt;/a&gt; by Andriy Semenets - initial architectural inspiration for agent-based automation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;PentAGI&lt;/strong&gt; is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/LICENSE&quot;&gt;MIT License&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Copyright (c) 2025 PentAGI Development Team&lt;/p&gt; 
&lt;h3&gt;Third-Party Dependencies&lt;/h3&gt; 
&lt;p&gt;All third-party dependencies use MIT-compatible licenses. See &lt;a href=&quot;https://raw.githubusercontent.com/vxcontrol/pentagi/main/licenses/&quot;&gt;licenses/&lt;/a&gt; directory for detailed license reports.&lt;/p&gt; 
&lt;h3&gt;VXControl Cloud Services&lt;/h3&gt; 
&lt;p&gt;⚠️ &lt;strong&gt;Note:&lt;/strong&gt; While the VXControl Cloud SDK code is MIT licensed, accessing &lt;strong&gt;VXControl Cloud Services&lt;/strong&gt; (threat intelligence, AI support, premium features) requires a separate License Key and compliance with &lt;a href=&quot;https://github.com/vxcontrol/cloud#license-and-terms&quot;&gt;Terms of Service&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The SDK code itself is free to use - service access requires registration.&lt;/p&gt; 
&lt;p&gt;For questions contact: &lt;strong&gt;&lt;a href=&quot;mailto:info@pentagi.com&quot;&gt;info@pentagi.com&lt;/a&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;a href=&quot;mailto:info@vxcontrol.com&quot;&gt;info@vxcontrol.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/913030762/c8502908-380f-4897-aaba-87cfa16d67b4" medium="image" />
      
    </item>
    
    <item>
      <title>dstotijn/hetty</title>
      <link>https://github.com/dstotijn/hetty</link>
      <description>&lt;p&gt;An HTTP toolkit for security research.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://hetty.xyz&quot;&gt;https://hetty.xyz&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/983924/156430531-6193e187-7400-436b-81c6-f86862783ea5.svg#gh-light-mode-only&quot; width=&quot;240&quot; /&gt; 
&lt;img src=&quot;https://user-images.githubusercontent.com/983924/156430660-9d5bd555-dcfd-47e2-ba70-54294c20c1b4.svg#gh-dark-mode-only&quot; width=&quot;240&quot; /&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/dstotijn/hetty/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/dstotijn/hetty?color=25ae8f&quot; alt=&quot;Latest GitHub release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/dstotijn/hetty/actions/workflows/build-test.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fdstotijn%2Fhetty%2Fbadge%3Fref%3Dmain&amp;amp;label=build&amp;amp;color=24ae8f&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/downloads/dstotijn/hetty/total?color=25ae8f&quot; alt=&quot;GitHub download count&quot; /&gt; &lt;a href=&quot;https://github.com/dstotijn/hetty/raw/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/dstotijn/hetty?color=25ae8f&quot; alt=&quot;GitHub&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hetty.xyz/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/hetty-docs-25ae8f&quot; alt=&quot;Documentation&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Hetty&lt;/strong&gt; is an HTTP toolkit for security research. It aims to become an open source alternative to commercial software like Burp Suite Pro, with powerful features tailored to the needs of the infosec and bug bounty community.&lt;/p&gt; 
&lt;img src=&quot;https://hetty.xyz/img/hero.png&quot; width=&quot;907&quot; alt=&quot;Hetty proxy logs (screenshot)&quot; /&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Machine-in-the-middle (MITM) HTTP proxy, with logs and advanced search&lt;/li&gt; 
 &lt;li&gt;HTTP client for manually creating/editing requests, and replay proxied requests&lt;/li&gt; 
 &lt;li&gt;Intercept requests and responses for manual review (edit, send/receive, cancel)&lt;/li&gt; 
 &lt;li&gt;Scope support, to help keep work organized&lt;/li&gt; 
 &lt;li&gt;Easy-to-use web based admin interface&lt;/li&gt; 
 &lt;li&gt;Project based database storage, to help keep work organized&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;👷‍♂️ Hetty is under active development. Check the &lt;a href=&quot;https://github.com/dstotijn/hetty/projects/1&quot;&gt;backlog&lt;/a&gt; for the current status.&lt;/p&gt; 
&lt;p&gt;📣 Are you pen testing professionally in a team? I would love to hear your thoughts on tooling via &lt;a href=&quot;https://forms.gle/36jtgNc3TJ2imi5A8&quot;&gt;this 5 minute survey&lt;/a&gt;. Thank you!&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;💡 The &lt;a href=&quot;https://hetty.xyz/docs/getting-started&quot;&gt;Getting started&lt;/a&gt; doc has more detailed install and usage instructions.&lt;/p&gt; 
&lt;h3&gt;Installation&lt;/h3&gt; 
&lt;p&gt;The quickest way to install and update Hetty is via a package manager:&lt;/p&gt; 
&lt;h4&gt;macOS&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install hettysoft/tap/hetty
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Linux&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sudo snap install hetty
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Windows&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;scoop bucket add hettysoft https://github.com/hettysoft/scoop-bucket.git
scoop install hettysoft/hetty
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Other&lt;/h4&gt; 
&lt;p&gt;Alternatively, you can &lt;a href=&quot;https://github.com/dstotijn/hetty/releases/latest&quot;&gt;download the latest release from GitHub&lt;/a&gt; for your OS and architecture, and move the binary to a directory in your &lt;code&gt;$PATH&lt;/code&gt;. If your OS is not available for one of the package managers or not listed in the GitHub releases, you can compile from source &lt;em&gt;(link coming soon)&lt;/em&gt;.&lt;/p&gt; 
&lt;h4&gt;Docker&lt;/h4&gt; 
&lt;p&gt;Docker images are distributed via &lt;a href=&quot;https://github.com/dstotijn/hetty/pkgs/container/hetty&quot;&gt;GitHub&#39;s Container registry&lt;/a&gt; and &lt;a href=&quot;https://hub.docker.com/r/dstotijn/hetty&quot;&gt;Docker Hub&lt;/a&gt;. To run Hetty via with a volume for database and certificate storage, and port 8080 forwarded:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run -v $HOME/.hetty:/root/.hetty -p 8080:8080 \
  ghcr.io/dstotijn/hetty:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Usage&lt;/h3&gt; 
&lt;p&gt;Once installed, start Hetty via:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;hetty
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;💡 Read the &lt;a href=&quot;https://hetty.xyz/docs/getting-started&quot;&gt;Getting started&lt;/a&gt; doc for more details.&lt;/p&gt; 
&lt;p&gt;To list all available options, run: &lt;code&gt;hetty --help&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ hetty --help

Usage:
    hetty [flags] [subcommand] [flags]

Runs an HTTP server with (MITM) proxy, GraphQL service, and a web based admin interface.

Options:
    --cert         Path to root CA certificate. Creates file if it doesn&#39;t exist. (Default: &quot;~/.hetty/hetty_cert.pem&quot;)
    --key          Path to root CA private key. Creates file if it doesn&#39;t exist. (Default: &quot;~/.hetty/hetty_key.pem&quot;)
    --db           Database file path. Creates file if it doesn&#39;t exist. (Default: &quot;~/.hetty/hetty.db&quot;)
    --addr         TCP address for HTTP server to listen on, in the form \&quot;host:port\&quot;. (Default: &quot;:8080&quot;)
    --chrome       Launch Chrome with proxy settings applied and certificate errors ignored. (Default: false)
    --verbose      Enable verbose logging.
    --json         Encode logs as JSON, instead of pretty/human readable output.
    --version, -v  Output version.
    --help, -h     Output this usage text.

Subcommands:
    - cert  Certificate management

Run `hetty &amp;lt;subcommand&amp;gt; --help` for subcommand specific usage instructions.

Visit https://hetty.xyz to learn more about Hetty.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;📖 &lt;a href=&quot;https://hetty.xyz/docs&quot;&gt;Read the docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;Use &lt;a href=&quot;https://github.com/dstotijn/hetty/issues&quot;&gt;issues&lt;/a&gt; for bug reports and feature requests, and &lt;a href=&quot;https://github.com/dstotijn/hetty/discussions&quot;&gt;discussions&lt;/a&gt; for questions and troubleshooting.&lt;/p&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;p&gt;💬 &lt;a href=&quot;https://discord.gg/3HVsj5pTFP&quot;&gt;Join the Hetty Discord server&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Want to contribute? Great! Please check the &lt;a href=&quot;https://raw.githubusercontent.com/dstotijn/hetty/main/CONTRIBUTING.md&quot;&gt;Contribution Guidelines&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Thanks to the &lt;a href=&quot;https://www.hacker101.com/discord&quot;&gt;Hacker101 community on Discord&lt;/a&gt; for the encouragement and early feedback.&lt;/li&gt; 
 &lt;li&gt;The font used in the logo and admin interface is &lt;a href=&quot;https://www.jetbrains.com/lp/mono/&quot;&gt;JetBrains Mono&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Sponsors&lt;/h2&gt; 
&lt;p&gt;💖 Are you enjoying Hetty? You can &lt;a href=&quot;https://github.com/sponsors/dstotijn&quot;&gt;sponsor me&lt;/a&gt;!&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dstotijn/hetty/main/LICENSE&quot;&gt;MIT&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;© 2019–2025 Hetty Software&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/222258954/97473f06-84ac-4fc6-ad06-6392a920ac97" medium="image" />
      
    </item>
    
    <item>
      <title>rorkai/App-Store-Connect-CLI</title>
      <link>https://github.com/rorkai/App-Store-Connect-CLI</link>
      <description>&lt;p&gt;Fast, scriptable CLI for the App Store Connect API. Automate TestFlight, builds, submissions, signing, analytics, screenshots, subscriptions, and more&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://asccli.sh&quot;&gt;https://asccli.sh&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;App Store Connect CLI&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/rorkai/App-Store-Connect-CLI/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/rorkai/App-Store-Connect-CLI?style=for-the-badge&amp;amp;color=blue&quot; alt=&quot;Latest Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/rorkai/App-Store-Connect-CLI/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/rorkai/app-store-connect-cli?style=for-the-badge&quot; alt=&quot;GitHub Stars&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/go-mod/go-version/rorkai/App-Store-Connect-CLI?filename=go.mod&amp;amp;style=for-the-badge&amp;amp;logo=go&quot; alt=&quot;Go version from go.mod&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge&quot; alt=&quot;License&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Homebrew-compatible-blue?style=for-the-badge&quot; alt=&quot;Homebrew&quot; /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/images/banner.png&quot; alt=&quot;asc -- App Store Connect CLI&quot; width=&quot;600&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;A fast, lightweight, and scriptable CLI for the App Store Connect API. Automate iOS, macOS, tvOS, and visionOS release workflows from your terminal, IDE, or CI/CD pipeline.&lt;/p&gt; 
&lt;h2&gt;Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#asc-skills&quot;&gt;asc skills&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#sponsors&quot;&gt;Sponsors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#quick-start&quot;&gt;Quick Start&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#troubleshooting&quot;&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#privacy-and-telemetry&quot;&gt;Privacy and telemetry&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#support&quot;&gt;Support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#wall-of-apps&quot;&gt;Wall of Apps&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#common-workflows&quot;&gt;Common Workflows&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#commands-and-reference&quot;&gt;Commands and Reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#documentation&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/#license&quot;&gt;License&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;asc skills&lt;/h2&gt; 
&lt;p&gt;Agent Skills for automating &lt;code&gt;asc&lt;/code&gt; workflows including builds, TestFlight, metadata sync, submissions, and signing: &lt;a href=&quot;https://github.com/rorkai/app-store-connect-cli-skills&quot;&gt;https://github.com/rorkai/app-store-connect-cli-skills&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Install them globally so they are available across projects:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc install-skills
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;asc install-skills&lt;/code&gt; checks out reviewed commit &lt;code&gt;f52c4f04323bb2dfb21ca8be82e6494e9cd0b4d8&lt;/code&gt; and copies its 25 skills directly into the standard global agent-skills directory. It verifies the complete pack and every installed file before succeeding, preserves unrelated skills and unrelated lock entries, and pins the 25 ASC lock entries to the same reviewed commit so external checks cannot update them from a mutable branch. It rolls back the pack if any replacement fails. Only &lt;code&gt;git&lt;/code&gt; is required; the command does not execute Node.js, &lt;code&gt;npx&lt;/code&gt;, an npm package, or repository scripts.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git --version
asc install-skills
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;p&gt;If you want to confirm the binary works before configuring authentication:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc version
asc --help
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;1. Install&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Homebrew (recommended)
brew install asc

# Install script (macOS/Linux)
curl -fsSL https://asccli.sh/install | bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# Windows (WinGet, once the package is accepted)
winget install asc

# Exact fallback when scripting
winget install --id Rorkai.ASC --exact
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The WinGet package is tracked in &lt;a href=&quot;https://github.com/rorkai/App-Store-Connect-CLI/discussions/1552&quot;&gt;GitHub Discussion #1552&lt;/a&gt;. Until it appears in &lt;code&gt;winget search asc&lt;/code&gt;, Windows users can download the signed release binaries directly from the &lt;a href=&quot;https://github.com/rorkai/App-Store-Connect-CLI/releases/latest&quot;&gt;GitHub releases page&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For source builds and contributor setup, see &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;. Released binaries are self-contained and do not require a Go installation; source builds use the toolchain version declared by &lt;code&gt;go.mod&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;2. Authenticate&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc auth login \
  --name &quot;MyApp&quot; \
  --key-id &quot;ABC123&quot; \
  --issuer-id &quot;DEF456&quot; \
  --private-key /path/to/AuthKey.p8 \
  --network
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Individual API keys have no issuer ID. Omit &lt;code&gt;--issuer-id&lt;/code&gt; and pass &lt;code&gt;--key-type individual&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc auth login \
  --name &quot;MyIndividualKey&quot; \
  --key-id &quot;ABC123&quot; \
  --key-type individual \
  --private-key /path/to/AuthKey.p8
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Generate API keys at: &lt;a href=&quot;https://appstoreconnect.apple.com/access/integrations/api&quot;&gt;https://appstoreconnect.apple.com/access/integrations/api&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;If you are running in CI, a headless shell, or a machine where keychain access is not available, use config-backed auth instead:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc auth login \
  --bypass-keychain \
  --name &quot;MyCIKey&quot; \
  --key-id &quot;ABC123&quot; \
  --issuer-id &quot;DEF456&quot; \
  --private-key /path/to/AuthKey.p8
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;3. Validate auth&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc auth status --validate
asc auth doctor
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;4. First command&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc apps list --output table
asc apps list --output json --pretty
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Output defaults (TTY-aware)&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;asc&lt;/code&gt; chooses a default &lt;code&gt;--output&lt;/code&gt; based on where stdout is connected:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Interactive terminal (TTY): &lt;code&gt;table&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Non-interactive output (pipes/files/CI): &lt;code&gt;json&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;You can still set a global preference:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export ASC_DEFAULT_OUTPUT=markdown
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;And explicit flags always win:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc apps list --output json
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Compatibility&lt;/h3&gt; 
&lt;p&gt;Commands are supported as documented. Deprecation warnings identify the available migration path and the command&#39;s long-term replacement.&lt;/p&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;h3&gt;Homebrew&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Refresh Homebrew first: &lt;code&gt;brew update &amp;amp;&amp;amp; brew upgrade asc&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Check which binary you are running: &lt;code&gt;which asc&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Confirm the installed version: &lt;code&gt;asc version&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;If Homebrew is behind the latest GitHub release, use the install script from &lt;code&gt;https://asccli.sh/install&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;WinGet&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Refresh WinGet sources first: &lt;code&gt;winget source update&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Prefer the short install once available: &lt;code&gt;winget install asc&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;If the short name ever becomes ambiguous, use the package identifier: &lt;code&gt;winget install --id Rorkai.ASC --exact&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Confirm the installed command resolves: &lt;code&gt;Get-Command asc&lt;/code&gt; and &lt;code&gt;asc version&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Authentication&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Validate the active profile: &lt;code&gt;asc auth status --validate&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Run the auth health check: &lt;code&gt;asc auth doctor&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;If keychain access is blocked, retry with &lt;code&gt;ASC_BYPASS_KEYCHAIN=1&lt;/code&gt; or re-run &lt;code&gt;asc auth login --bypass-keychain&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Use &lt;code&gt;asc auth login --local --bypass-keychain ...&lt;/code&gt; when you want repo-local credentials in &lt;code&gt;./.asc/config.json&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Apple service health&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Check Apple&#39;s developer services without credentials: &lt;code&gt;asc system-status&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Narrow unexpected API or upload failures: &lt;code&gt;asc system-status --service &quot;App Store Connect&quot;&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Poll only when requested: &lt;code&gt;asc system-status --watch --poll-interval 30s&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Use &lt;code&gt;--issues-only&lt;/code&gt; for a concise incident view; summary counts still cover all matched services&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Output&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;asc&lt;/code&gt; defaults to &lt;code&gt;table&lt;/code&gt; in an interactive terminal and &lt;code&gt;json&lt;/code&gt; in pipes, files, and CI&lt;/li&gt; 
 &lt;li&gt;Use an explicit format when scripting or sharing repro steps: &lt;code&gt;--output json&lt;/code&gt;, &lt;code&gt;--output table&lt;/code&gt;, or &lt;code&gt;--output markdown&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Use &lt;code&gt;--pretty&lt;/code&gt; with JSON when you want readable output in terminals or bug reports&lt;/li&gt; 
 &lt;li&gt;Set a personal default with &lt;code&gt;ASC_DEFAULT_OUTPUT&lt;/code&gt;, but remember &lt;code&gt;--output&lt;/code&gt; always wins&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Privacy and telemetry&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;asc&lt;/code&gt; sends pseudonymous command-level usage telemetry by default to help maintainers understand which commands are used and where reliability work is needed. Local events include a random installation ID, which lets events from one installation be grouped over time; it is not derived from an Apple account or machine identifier.&lt;/p&gt; 
&lt;p&gt;Telemetry includes the CLI version, operating system and architecture, registered command path, duration, runtime context, invocation source, a bounded outcome class, and the HTTP status when an API request fails. It may include a sanitized public flag name. It does &lt;strong&gt;not&lt;/strong&gt; include raw arguments, stderr, error messages, flag values, response bodies, credentials, private keys, Apple account, team, or issuer IDs, app or bundle IDs, usernames, hostnames, repository names, or file paths.&lt;/p&gt; 
&lt;p&gt;Review or change telemetry at any time:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc telemetry status
asc telemetry disable
asc telemetry reset-id
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;ASC_TELEMETRY_DISABLED=1&lt;/code&gt; and &lt;code&gt;DO_NOT_TRACK=1&lt;/code&gt; also disable telemetry. See the &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/commands/telemetry.mdx&quot;&gt;telemetry reference&lt;/a&gt; for the exact event payload, runtime handling, collector endpoint, and all controls.&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Use &lt;a href=&quot;https://github.com/rorkai/App-Store-Connect-CLI/discussions&quot;&gt;GitHub Discussions&lt;/a&gt; for install help, authentication setup, workflow advice, and &quot;how do I...?&quot; questions&lt;/li&gt; 
 &lt;li&gt;Use &lt;a href=&quot;https://github.com/rorkai/App-Store-Connect-CLI/issues&quot;&gt;GitHub Issues&lt;/a&gt; for reproducible bugs and concrete feature requests&lt;/li&gt; 
 &lt;li&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/SUPPORT.md&quot;&gt;SUPPORT.md&lt;/a&gt; for the support policy and bug-report checklist&lt;/li&gt; 
 &lt;li&gt;Before filing an auth or API bug, retry with &lt;code&gt;ASC_BYPASS_KEYCHAIN=1&lt;/code&gt;; if it is safe to do so, include redacted output from &lt;code&gt;ASC_DEBUG=api asc ...&lt;/code&gt; or &lt;code&gt;asc --api-debug ...&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Wall of Apps&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://asccli.sh/#wall-of-apps&quot;&gt;See the Wall of Apps →&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Want to add yours? &lt;code&gt;asc apps wall submit --app &quot;1234567890&quot; --confirm&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;The command uses your authenticated &lt;code&gt;gh&lt;/code&gt; session to fork the repo and open a pull request that updates &lt;code&gt;docs/wall-of-apps.json&lt;/code&gt;. It resolves the public App Store name, URL, and icon from the app ID automatically. For manual entries that are not on the public App Store yet, use &lt;code&gt;--link&lt;/code&gt; with &lt;code&gt;--name&lt;/code&gt;. Use &lt;code&gt;asc apps wall submit --dry-run&lt;/code&gt; to preview the fork, branch, and PR plan before creating anything.&lt;/p&gt; 
&lt;h2&gt;Common Workflows&lt;/h2&gt; 
&lt;h3&gt;TestFlight feedback and crashes&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc testflight feedback list --app &quot;123456789&quot; --paginate
asc testflight crashes list --app &quot;123456789&quot; --sort -createdDate --limit 10
asc testflight crashes log --submission-id &quot;SUBMISSION_ID&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Builds and distribution&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc builds upload --app &quot;123456789&quot; --ipa &quot;/path/to/MyApp.ipa&quot;
asc builds list --app &quot;123456789&quot; --output table
asc testflight groups list --app &quot;123456789&quot; --output table
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For macOS TestFlight distribution, upload the exported &lt;code&gt;.pkg&lt;/code&gt; first, then add the processed build to a beta group:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc builds upload --app &quot;123456789&quot; --pkg &quot;./build/MyMacApp.pkg&quot; --version &quot;1.2.3&quot; --build-number &quot;42&quot; --wait --output json
asc builds add-groups --app &quot;123456789&quot; --build-number &quot;42&quot; --version &quot;1.2.3&quot; --platform MAC_OS --group &quot;Internal Testers&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;--app&lt;/code&gt; is the App Store Connect app ID. If you use local Xcode build flags such as &lt;code&gt;--archive-path&lt;/code&gt;, also pass exactly one of &lt;code&gt;--workspace&lt;/code&gt; or &lt;code&gt;--project&lt;/code&gt; plus &lt;code&gt;--scheme&lt;/code&gt;; otherwise use a pre-exported &lt;code&gt;.ipa&lt;/code&gt; or &lt;code&gt;.pkg&lt;/code&gt; upload. Add &lt;code&gt;--submit --confirm&lt;/code&gt; to &lt;code&gt;asc builds add-groups&lt;/code&gt; when distributing to an external TestFlight group that needs beta app review submission.&lt;/p&gt; 
&lt;h3&gt;Release (high-level App Store publish flow)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Optional: preview the staging plan before submission
asc release stage --app &quot;123456789&quot; --version &quot;1.2.3&quot; --build-id &quot;BUILD_ID&quot; --copy-metadata-from &quot;1.2.2&quot; --dry-run

# Canonical upload + attach + submit command
asc publish appstore --app &quot;123456789&quot; --ipa &quot;/path/to/MyApp.ipa&quot; --version &quot;1.2.3&quot; --submit --confirm

# Monitor status after submission
asc status --app &quot;123456789&quot; --watch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Lower-level submission lifecycle commands (for debugging or partial workflows):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Canonical readiness check
asc validate --app &quot;123456789&quot; --version &quot;1.2.3&quot;
asc submit status --version-id &quot;VERSION_ID&quot;
asc submit cancel --version-id &quot;VERSION_ID&quot; --confirm
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Readiness validation also warns when localized app names, subtitles, descriptions, keywords, promotional text, or What&#39;s New copy still contains an unmistakable template marker such as &lt;code&gt;Lorem ipsum&lt;/code&gt;, &lt;code&gt;TODO&lt;/code&gt;, &lt;code&gt;TBD&lt;/code&gt;, or &lt;code&gt;FIXME&lt;/code&gt;. &lt;code&gt;Lorem ipsum&lt;/code&gt; matches in any letter case. &lt;code&gt;TODO&lt;/code&gt;, &lt;code&gt;TBD&lt;/code&gt;, and &lt;code&gt;FIXME&lt;/code&gt; match only in uppercase because their lowercase spellings can be ordinary product wording. The warning includes the locale, field, matched text, resource ID, and a remediation step. It is advisory by default and becomes blocking only with &lt;code&gt;--strict&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc validate --app &quot;123456789&quot; --version &quot;1.2.3&quot; --output json
asc validate --app &quot;123456789&quot; --version &quot;1.2.3&quot; --strict
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Add the &lt;code&gt;--deep&lt;/code&gt; mode when a release needs checks that Apple exposes only through its signed-in web app:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc web auth login --apple-id &quot;user@example.com&quot;
asc validate --app &quot;123456789&quot; --version &quot;1.2.3&quot; --deep
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Deep validation reuses the file-backed cache without opening a login, Keychain, password, or 2FA prompt. It checks App Privacy publication, relevant agreements, and the first auto-renewable subscription attachment; availability and required App Review fields still come from the public API. Paid-agreement relevance also uses the app&#39;s current public price so an upfront-paid app isn&#39;t mistaken for a free one. The private Apple endpoints can change without notice, so an unavailable or changed response is &lt;code&gt;unverified&lt;/code&gt;, not a false blocker. Add &lt;code&gt;--strict&lt;/code&gt; if CI must fail when a requested deep check can&#39;t be verified.&lt;/p&gt; 
&lt;p&gt;This lint intentionally does not judge platform names, roadmap language, or beta/demo wording because those phrases can be legitimate product copy and cannot be classified reliably offline. It also leaves shorter Lorem Ipsum product wording and ordinary localized &lt;code&gt;TODO&lt;/code&gt; copy without marker punctuation unflagged; only template-like residue is reported.&lt;/p&gt; 
&lt;h3&gt;Review status and blockers&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc review status --app &quot;123456789&quot;
asc review doctor --app &quot;123456789&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Metadata and localization&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc localizations list --app &quot;123456789&quot; --type app-info
asc metadata init --dir &quot;./metadata&quot; --version &quot;1.2.3&quot; --locale &quot;en-US&quot;
asc metadata apply --app &quot;123456789&quot; --version &quot;1.2.3&quot; --dir &quot;./metadata&quot; --dry-run
asc metadata keywords audit --app &quot;123456789&quot; --version &quot;1.2.3&quot; --blocked-terms-file &quot;./blocked-terms.txt&quot;
asc apps info view --app &quot;123456789&quot; --output json --pretty
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Use &lt;code&gt;asc metadata keywords audit&lt;/code&gt; before &lt;code&gt;sync&lt;/code&gt; or &lt;code&gt;apply&lt;/code&gt; when you want an ASO-focused review of live keyword metadata across locales. It reports duplicate phrases, repeated terms across locales, overlap with localized app name or subtitle, byte-budget usage, and optional blocked terms from repeated &lt;code&gt;--blocked-term&lt;/code&gt; flags or a text file.&lt;/p&gt; 
&lt;h3&gt;Screenshots and media&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc screenshots plan --app &quot;123456789&quot; --version &quot;1.2.3&quot; --review-output-dir &quot;./screenshots/review&quot;
asc screenshots apply --app &quot;123456789&quot; --version &quot;1.2.3&quot; --review-output-dir &quot;./screenshots/review&quot; --confirm
asc screenshots list --version-localization &quot;VERSION_LOCALIZATION_ID&quot;
asc video-previews list --app &quot;123456789&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Uploading screenshots for a single locale:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc apps list
asc versions list --app &quot;APP_ID&quot;
asc localizations list --version &quot;VERSION_ID&quot; --output json --locale &quot;en-US&quot; | jsonpp
asc screenshots upload --version-localization &quot;VERSION_LOCALIZATION_ID&quot; --path &quot;./screenshots/en-US&quot; --device-type &quot;IPHONE_65&quot; --replace --max-screenshots 10
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;VERSION_LOCALIZATION_ID&lt;/code&gt; is the App Store version localization resource ID from &lt;code&gt;data[].id&lt;/code&gt;, not the locale code from &lt;code&gt;attributes.locale&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;For local capture coverage across multiple devices, locales, appearances, and content fixtures, use a matrix plan. Targets must already be booted simulators; the command writes raw artifacts and an offline review report, without uploading to App Store Connect:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc screenshots matrix --plan .asc/screenshots-matrix.json --max-concurrency 2 --output json --pretty
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/design/screenshots-matrix.md&quot;&gt;docs/design/screenshots-matrix.md&lt;/a&gt; for the JSONC schema, isolated output layout, retry behavior, and review contract.&lt;/p&gt; 
&lt;h3&gt;Signing and bundle IDs&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc bundle-ids capabilities list --bundle &quot;BUNDLE_ID&quot;
asc signing fetch --bundle-id com.example.app --profile-type IOS_APP_STORE --output .asc/signing
asc signing sync pull --repo git@github.com:team/signing.git --password-file ~/.config/asc/signing-sync-password --output-dir .asc/signing/pulled
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;signing fetch&lt;/code&gt; downloads public certificates and provisioning profiles. A usable signing identity also needs the matching private key; &lt;code&gt;signing sync&lt;/code&gt; can verify that local identity and share it through an encrypted Git repository. For multi-target release testing, &lt;code&gt;signing reconcile&lt;/code&gt; plans exact device/profile changes. &lt;code&gt;signing run&lt;/code&gt; provides a temporary macOS keychain only for single-target archives. Multi-target exports must import the identity into a job-scoped keychain and install every reconciled profile for the job-exclusive macOS user. See the &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/guides/code-signing.mdx&quot;&gt;signing guide&lt;/a&gt; for setup, CI, rotation, security boundaries, and troubleshooting.&lt;/p&gt; 
&lt;h3&gt;Workflow automation&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc workflow validate --output json
asc workflow run --dry-run testflight_beta VERSION:1.2.3
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Verified local Xcode -&amp;gt; TestFlight workflow&lt;/h3&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/WORKFLOWS.md&quot;&gt;docs/WORKFLOWS.md&lt;/a&gt; for local compile validation with &lt;code&gt;asc xcode build&lt;/code&gt; and a copyable &lt;code&gt;.asc/deployment.json&lt;/code&gt;, &lt;code&gt;.asc/workflow.json&lt;/code&gt;, and &lt;code&gt;ExportOptions.plist&lt;/code&gt; that use &lt;code&gt;asc builds next-build-number&lt;/code&gt;, &lt;code&gt;asc xcode inject&lt;/code&gt;, &lt;code&gt;asc xcode archive&lt;/code&gt;, &lt;code&gt;asc xcode export --timeout 10m&lt;/code&gt;, and &lt;code&gt;asc publish testflight --group ... --wait&lt;/code&gt;. Add &lt;code&gt;--submit --confirm&lt;/code&gt; when distributing to an external TestFlight group that needs beta app review submission.&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;asc xcode test&lt;/code&gt; command provides local unit/UI test execution with structured results and preserved &lt;code&gt;.xcresult&lt;/code&gt; bundles; see the same workflow guide for an invocation.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc workflow validate --output json
asc xcode inject --manifest .asc/deployment.json --set version=1.2.3 --set build_number=42 --dry-run --output json
asc xcode build --project App.xcodeproj --scheme App --destination &#39;platform=iOS Simulator,name=iPhone 17 Pro Max,OS=27.0&#39; --no-code-signing --output json
asc workflow run --dry-run testflight_beta VERSION:1.2.3
asc workflow run testflight_beta VERSION:1.2.3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Replace the example Xcode destination with a simulator installed on the host.&lt;/p&gt; 
&lt;h3&gt;Xcode Cloud workflows and build runs&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Trigger from a pull request
asc xcode-cloud run --workflow-id &quot;WORKFLOW_ID&quot; --pull-request-id &quot;PR_ID&quot;

# Rerun from an existing build run with a clean build
asc xcode-cloud run --source-run-id &quot;BUILD_RUN_ID&quot; --clean

# Fetch a single build run by ID
asc xcode-cloud build-runs get --id &quot;BUILD_RUN_ID&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Apple Ads campaign management&lt;/h3&gt; 
&lt;p&gt;Apple Ads uses separate OAuth credentials from App Store Connect:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc ads auth login --name &quot;Marketing&quot; --client-id &quot;SEARCHADS_CLIENT_ID&quot; --team-id &quot;SEARCHADS_TEAM_ID&quot; --key-id &quot;KEY_ID&quot; --private-key ./ads-key.pem --ad-account &quot;987654&quot;
asc ads auth discover --output json
asc ads campaigns find --ad-account &quot;987654&quot; --file query.json --output json
asc ads reports apps campaigns --ad-account &quot;987654&quot; --file report.json --output json
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/guides/apple-ads-playbooks.mdx&quot;&gt;guides/apple-ads-playbooks.mdx&lt;/a&gt; for operator playbooks covering credential safety, org inspection, read-only smoke tests, reporting, raw API usage, and guarded mutations.&lt;/p&gt; 
&lt;h3&gt;StoreKit Retention Messaging&lt;/h3&gt; 
&lt;p&gt;Retention Messaging uses a dedicated In-App Purchase API key, separate from App Store Connect API credentials:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc storekit auth login --name Production --key-id &quot;KEY_ID&quot; --issuer-id &quot;ISSUER_ID&quot; --private-key ./SubscriptionKey.p8 --bundle-id com.example.app
asc storekit auth doctor --environment sandbox --network
asc storekit retention-messaging messages list --environment sandbox --output json
asc storekit retention-messaging endpoint view --environment production
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/architecture/storekit-retention-messaging.md&quot;&gt;docs/architecture/storekit-retention-messaging.md&lt;/a&gt; for the endpoint map, message and image requirements, environment variables, and the full sandbox verification sequence.&lt;/p&gt; 
&lt;h2&gt;Commands and Reference&lt;/h2&gt; 
&lt;p&gt;Use built-in help as the source of truth:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asc --help
asc &amp;lt;command&amp;gt; --help
asc &amp;lt;command&amp;gt; &amp;lt;subcommand&amp;gt; --help
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Reference hierarchy:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;asc --help&lt;/code&gt;: authoritative command and flag surface&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;docs/COMMANDS.md&lt;/code&gt;: generated top-level taxonomy map&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;asc docs show workflows&lt;/code&gt;: curated workflow recipes&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;asc docs show reference&lt;/code&gt;: repo-local quick reference template used by &lt;code&gt;asc init&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For full command families, flags, and discovery patterns, see:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/COMMANDS.md&quot;&gt;docs/COMMANDS.md&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/CI_CD.md&quot;&gt;docs/CI_CD.md&lt;/a&gt; - CI/CD integration guides (GitHub Actions, GitLab, Bitrise, CircleCI)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/commands/signing.mdx&quot;&gt;commands/signing.mdx&lt;/a&gt; - signing identities, encrypted sync, CI, and release-testing profiles&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/COMMANDS.md&quot;&gt;docs/COMMANDS.md&lt;/a&gt; - Command families and reference navigation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/PARITY.md&quot;&gt;docs/PARITY.md&lt;/a&gt; - Remaining parity areas and intentional non-goals&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/WORKFLOWS.md&quot;&gt;docs/WORKFLOWS.md&lt;/a&gt; - Reusable workflow patterns, including local Xcode to TestFlight&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/guides/apple-ads-playbooks.mdx&quot;&gt;guides/apple-ads-playbooks.mdx&lt;/a&gt; - Apple Ads operator playbooks&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/architecture/storekit-retention-messaging.md&quot;&gt;docs/architecture/storekit-retention-messaging.md&lt;/a&gt; - Retention Messaging setup and sandbox verification&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/API_NOTES.md&quot;&gt;docs/API_NOTES.md&lt;/a&gt; - API quirks and behaviors&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/CONTRIBUTING.md&quot;&gt;docs/CONTRIBUTING.md&lt;/a&gt; - CLI development and testing notes&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/TESTING.md&quot;&gt;docs/TESTING.md&lt;/a&gt; - Testing patterns and conventions&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/docs/openapi/README.md&quot;&gt;docs/openapi/README.md&lt;/a&gt; - Offline OpenAPI snapshot + update flow&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; - Contribution guide&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;p&gt;Local screenshot framing uses Koubou (pinned to &lt;code&gt;0.18.1&lt;/code&gt;) for deterministic device-frame rendering. GitHub: &lt;a href=&quot;https://github.com/bitomule/koubou&quot;&gt;https://github.com/bitomule/koubou&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Simulator UI automation for screenshot capture and interactions uses AXe CLI. GitHub: &lt;a href=&quot;https://github.com/cameroncooke/AXe&quot;&gt;https://github.com/cameroncooke/AXe&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;The keyword difficulty methodology used by &lt;code&gt;asc optimize keywords score&lt;/code&gt; is adapted from semihcihan&#39;s App Store Optimization CLI (MIT licensed). GitHub: &lt;a href=&quot;https://github.com/semihcihan/App-Store-Optimization-CLI&quot;&gt;https://github.com/semihcihan/App-Store-Optimization-CLI&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Contributions are welcome. See &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;MIT License - see &lt;a href=&quot;https://raw.githubusercontent.com/rorkai/App-Store-Connect-CLI/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;sub&gt;This project is an independent, unofficial tool and is not affiliated with, endorsed by, or sponsored by Apple Inc. App Store Connect, TestFlight, Xcode Cloud, and Apple are trademarks of Apple Inc., registered in the U.S. and other countries.&lt;/sub&gt; &lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/24ec7dc983fdb1465e19d2580628f74cd677a0f6cfa907291a7b3f5e1cc8eba8/rorkai/App-Store-Connect-CLI" medium="image" />
      
    </item>
    
    <item>
      <title>gtsteffaniak/filebrowser</title>
      <link>https://github.com/gtsteffaniak/filebrowser</link>
      <description>&lt;p&gt;📂 Web File Browser&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://filebrowserquantum.com&quot;&gt;https://filebrowserquantum.com&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://app.codacy.com/gh/gtsteffaniak/filebrowser/dashboard?utm_source=gh&amp;amp;utm_medium=referral&amp;amp;utm_content=&amp;amp;utm_campaign=Badge_grade&quot;&gt;&lt;img src=&quot;https://app.codacy.com/project/badge/Grade/0b548794f2ac4871a0cf7aa9ecab049f&quot; alt=&quot;Codacy Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/gtsteffaniak/filebrowser/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/gtsteffaniak/filebrowser&quot; alt=&quot;latest version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hub.docker.com/r/gtstef/filebrowser&quot;&gt;&lt;img src=&quot;https://img.shields.io/docker/pulls/gtstef/filebrowser?label=latest%20Docker%20pulls&quot; alt=&quot;DockerHub Pulls&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-Apache_2.0-blue.svg?sanitize=true&quot; alt=&quot;Apache-2.0 License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/gtsteffaniak/filebrowser/wiki/Q&amp;amp;A#is-there-a-way-to-donate-or-support-this-project&quot;&gt;&lt;img src=&quot;https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif&quot; alt=&quot;Donate&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;img width=&quot;150&quot; alt=&quot;FileBrowser Quantum logo&quot; src=&quot;https://github.com/user-attachments/assets/c40b22c9-33da-47b7-bc4c-ce69bb5cc174&quot; /&gt; 
 &lt;h3&gt;FileBrowser Quantum&lt;/h3&gt; The best free self-hosted web-based file manager. 
 &lt;br /&gt;
 &lt;br /&gt; 
 &lt;img width=&quot;800&quot; alt=&quot;FileBrowser Quantum file listing in dark mode&quot; src=&quot;https://filebrowserquantum.com/images/generated/listing/view-mode-normal-dark.jpg&quot; /&gt; 
&lt;/div&gt; 
&lt;h2&gt;Pinned&lt;/h2&gt; 
&lt;p&gt;📌 &lt;a href=&quot;https://filebrowserquantum.com/&quot;&gt;Read The Official Docs&lt;/a&gt; (currently english-only)&lt;/p&gt; 
&lt;p&gt;📌 &lt;a href=&quot;https://filebrowserquantum.com/en/docs/getting-started/v2/about/&quot;&gt;v2.0.0 is now in beta!&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;About&lt;/h2&gt; 
&lt;p&gt;FileBrowser Quantum provides an easy way to access and manage your files from the web. It has a modern responsive interface that has many advanced features to manage users, access, sharing, and file preview and editing.&lt;/p&gt; 
&lt;p&gt;This version is called &quot;Quantum&quot; because it packs tons of advanced features into a tiny and easy-to-run file. Unlike the majority of alternative options, FileBrowser Quantum is simple to install and easy to configure.&lt;/p&gt; 
&lt;p&gt;The goal for this repo is to become the best open-source self-hosted file browsing application that exists -- &lt;strong&gt;all for free&lt;/strong&gt;. This repo will always be free and open-source.&lt;/p&gt; 
&lt;p&gt;Ready to try it out? See &lt;a href=&quot;https://filebrowserquantum.com/en/docs/getting-started/&quot;&gt;Getting Started Docs&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;How its different&lt;/h2&gt; 
&lt;p&gt;FileBrowser Quantum is a massive fork of the file browser open-source project with the following changes:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;✅ Better source configuration - multiple sources, include/exclude rules, and &lt;a href=&quot;https://filebrowserquantum.com/en/docs/configuration/sources/&quot;&gt;more&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;✅ Login support for OIDC, LDAP, JWT, password + 2FA, and proxy.&lt;/li&gt; 
 &lt;li&gt;✅ Beautiful, Responsive, and Customizable user interface.&lt;/li&gt; 
 &lt;li&gt;✅ Streamlined configuration via &lt;code&gt;config.yaml&lt;/code&gt; config file.&lt;/li&gt; 
 &lt;li&gt;✅ Efficient search 
  &lt;ul&gt; 
   &lt;li&gt;Real-time search results as you type.&lt;/li&gt; 
   &lt;li&gt;Real-time monitoring and updates in the UI.&lt;/li&gt; 
   &lt;li&gt;Search supports file and folder sizes, along with various filters.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ Better listing browsing 
  &lt;ul&gt; 
   &lt;li&gt;Thumbnails support includes &lt;strong&gt;office&lt;/strong&gt;, &lt;strong&gt;video&lt;/strong&gt;, and &lt;strong&gt;album artwork&lt;/strong&gt;, and &lt;strong&gt;3D models&lt;/strong&gt;.&lt;/li&gt; 
   &lt;li&gt;Faster and more responsive views with animations.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Folder sizes&lt;/strong&gt; are displayed and support thumbnails&lt;/li&gt; 
   &lt;li&gt;Navigating remembers the last scroll position.&lt;/li&gt; 
   &lt;li&gt;WebDAV support&lt;/li&gt; 
   &lt;li&gt;Granular permissions&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ Highly configurable and &lt;a href=&quot;https://filebrowserquantum.com/en/docs/shares/options/&quot;&gt;customizable sharing options&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;share expiration time&lt;/li&gt; 
   &lt;li&gt;users who can access share (including anonymous)&lt;/li&gt; 
   &lt;li&gt;styling and themes&lt;/li&gt; 
   &lt;li&gt;file viewing, editing, and uploading permissions&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;✅ Access control that can be scoped to user or group and source path.&lt;/li&gt; 
 &lt;li&gt;✅ Developer API support 
  &lt;ul&gt; 
   &lt;li&gt;Ability to create long-lived API Tokens.&lt;/li&gt; 
   &lt;li&gt;A helpful Swagger page is available at &lt;code&gt;/swagger&lt;/code&gt; endpoint for API enabled users.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Notable features that this fork &lt;em&gt;does not&lt;/em&gt; have (removed):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;❌ shell commands are completely removed and will not be returned.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;FileBrowser Quantum differs significantly from the original version. Many of these changes required a significant overhaul. Creating a fork was a necessary process to make the program better. There have been many growing pains, but a stable release is planned and coming soon.&lt;/p&gt; 
&lt;h2&gt;The UI&lt;/h2&gt; 
&lt;p&gt;The UI has a simple three-component navigation system:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;(Left) Multi-action button with slide-out panel.&lt;/li&gt; 
 &lt;li&gt;(Middle) The powerful search bar / title&lt;/li&gt; 
 &lt;li&gt;(Right) The view change toggle / overflow menu&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;All other functions are moved either into the action menu or pop-up menus. If the action does not depend on context, it will exist in the slide-out action panel. If the action is available based on context, it will show up as a pop-up menu.&lt;/p&gt; 
&lt;img width=&quot;1200&quot; height=&quot;750&quot; alt=&quot;Aug-07-2026 14-54-55&quot; src=&quot;https://github.com/user-attachments/assets/fd1c1747-f30f-4e21-b991-f45744416d7e&quot; /&gt; 
&lt;h2&gt;Official Docs&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://filebrowserquantum.com/&quot;&gt;Official Docs&lt;/a&gt;. Contributions are welcome and encouraged! See &lt;a href=&quot;https://github.com/quantumx-apps/filebrowserDocs&quot;&gt;FilebrowserDocs Github&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Comparison Chart&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Application Name&lt;/th&gt; 
   &lt;th&gt;&lt;img width=&quot;48&quot; alt=&quot;&quot; src=&quot;https://github.com/user-attachments/assets/c40b22c9-33da-47b7-bc4c-ce69bb5cc174&quot; /&gt; Quantum&lt;/th&gt; 
   &lt;th&gt;&lt;img width=&quot;48&quot; alt=&quot;&quot; src=&quot;https://github.com/filebrowser/filebrowser/raw/master/frontend/public/img/logo.svg?sanitize=true&quot; /&gt; Filebrowser&lt;/th&gt; 
   &lt;th&gt;&lt;img width=&quot;48&quot; alt=&quot;&quot; src=&quot;https://github.com/mickael-kerjean/filestash/raw/master/public/assets/logo/app_icon.png?raw=true&quot; /&gt; Filestash&lt;/th&gt; 
   &lt;th&gt;&lt;img width=&quot;48&quot; alt=&quot;&quot; src=&quot;https://avatars.githubusercontent.com/u/19211038?s=200&amp;amp;v=4&quot; /&gt; Nextcloud&lt;/th&gt; 
   &lt;th&gt;&lt;img width=&quot;48&quot; alt=&quot;&quot; src=&quot;https://cdn.iconscout.com/icon/free/png-256/free-google-drive-logo-icon-svg-download-png-2476481.png&quot; /&gt; Google_Drive&lt;/th&gt; 
   &lt;th&gt;&lt;img width=&quot;48&quot; alt=&quot;&quot; src=&quot;https://avatars.githubusercontent.com/u/6422152?v=4&quot; /&gt; FileRun&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Filesystem support&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Windows&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Mac&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Self hostable&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Has Stable Release?&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;S3 support&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;webdav support&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;FTP support&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Dedicated docs site?&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Multiple sources at once&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Docker image size&lt;/td&gt; 
   &lt;td&gt;180 MB (with ffmpeg)&lt;/td&gt; 
   &lt;td&gt;31 MB&lt;/td&gt; 
   &lt;td&gt;240 MB (main image)&lt;/td&gt; 
   &lt;td&gt;250 MB&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;&amp;gt; 2 GB&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Min. Memory Requirements&lt;/td&gt; 
   &lt;td&gt;512 MB&lt;/td&gt; 
   &lt;td&gt;128 MB&lt;/td&gt; 
   &lt;td&gt;128 MB (main image)&lt;/td&gt; 
   &lt;td&gt;512 MB&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;512 MB&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;has standalone binary&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;price&lt;/td&gt; 
   &lt;td&gt;free&lt;/td&gt; 
   &lt;td&gt;free&lt;/td&gt; 
   &lt;td&gt;free&lt;/td&gt; 
   &lt;td&gt;free tier&lt;/td&gt; 
   &lt;td&gt;free tier&lt;/td&gt; 
   &lt;td&gt;$99+&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;rich media preview&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Upload files from the web?&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Advanced Search?&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;configurable&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Indexed Search?&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;configurable&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Content-aware search?&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;configurable&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Custom job support&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Multiple users&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Single sign-on support&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;LDAP sign-on support&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Long-live API key support&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;API documentation page&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Mobile App&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;open source?&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;tags support&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;shareable web links?&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Event-based notifications&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Metrics&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;file space quotas&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;text-based files editor&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Office file support&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Office file previews&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Themes&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Branding support&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;activity log&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Comments support&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;trash support&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Starred/pinned files&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Chromecast support&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Share collections of files&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Can archive selected files&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Can browse archive files&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Can convert documents&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Can convert videos&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Can convert photos&lt;/td&gt; 
   &lt;td&gt;🚧&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;✅&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
   &lt;td&gt;❌&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/2c6329d92e760280159c050af70eb5af4b59bf9ed560714c39aa615f2a949947/gtsteffaniak/filebrowser" medium="image" />
      
    </item>
    
    <item>
      <title>maximhq/bifrost</title>
      <link>https://github.com/maximhq/bifrost</link>
      <description>&lt;p&gt;Fastest enterprise AI gateway (50x faster than LiteLLM) with adaptive load balancer, cluster mode, guardrails, 1000+ models support &amp; &lt;100 µs overhead at 5k RPS.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://www.getmaxim.ai/bifrost&quot;&gt;https://www.getmaxim.ai/bifrost&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Bifrost AI Gateway&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://trendshift.io/repositories/14529?utm_source=repository-badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=badge-repository-14529&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/14529&quot; alt=&quot;maximhq%2Fbifrost | Trendshift&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://discord.gg/exN5KAydbU&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Discord-Join%20Community-5865F2?logo=discord&amp;amp;logoColor=white&quot; alt=&quot;Discord badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/maximhq/bifrost&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/maximhq/bifrost/branch/main/graph/badge.svg?sanitize=true&quot; alt=&quot;codecov&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/docker/pulls/maximhq/bifrost&quot; alt=&quot;Docker Pulls&quot; /&gt; &lt;a href=&quot;https://app.getpostman.com/run-collection/31642484-2ba0e658-4dcd-49f4-845a-0c7ed745b916?action=collection%2Ffork&amp;amp;source=rip_markdown&amp;amp;collection-url=entityId%3D31642484-2ba0e658-4dcd-49f4-845a-0c7ed745b916%26entityType%3Dcollection%26workspaceId%3D63e853c8-9aec-477f-909c-7f02f543150e&quot;&gt;&lt;img src=&quot;https://run.pstmn.io/button.svg?sanitize=true&quot; alt=&quot;Run In Postman&quot; style=&quot;width: 95px; height: 21px;&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://artifacthub.io/packages/search?repo=bifrost&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/bifrost&quot; alt=&quot;Artifact Hub&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/maximhq/bifrost/dev/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/maximhq/bifrost&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;The fastest way to build AI applications that never go down&lt;/h2&gt; 
&lt;p&gt;Bifrost is a high-performance AI gateway that unifies access to 23+ providers (OpenAI, Anthropic, AWS Bedrock, Google Vertex, and more) through a single OpenAI-compatible API. Deploy in seconds with zero configuration and get automatic failover, load balancing, semantic caching, and enterprise-grade features.&lt;/p&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/maximhq/bifrost/dev/docs/media/getting-started.png&quot; alt=&quot;Get started&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Go from zero to production-ready AI gateway in under a minute.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Start Bifrost Gateway&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install and run locally
npx -y @maximhq/bifrost

# Or use Docker
docker run -p 8080:8080 maximhq/bifrost
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Configure via Web UI&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Open the built-in web interface
open http://localhost:8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Make your first API call&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST http://localhost:8080/v1/chat/completions \
  -H &quot;Content-Type: application/json&quot; \
  -d &#39;{
    &quot;model&quot;: &quot;openai/gpt-4o-mini&quot;,
    &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Hello, Bifrost!&quot;}]
  }&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;That&#39;s it!&lt;/strong&gt; Your AI gateway is running with a web interface for visual configuration, real-time monitoring, and analytics.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Complete Setup Guides:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/gateway/setting-up&quot;&gt;Gateway Setup&lt;/a&gt; - HTTP API deployment&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/go-sdk/setting-up&quot;&gt;Go SDK Setup&lt;/a&gt; - Direct integration&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Enterprise Deployments&lt;/h2&gt; 
&lt;p&gt;Bifrost supports enterprise-grade, private deployments for teams running production AI systems at scale. In addition to private networking, custom security controls, and governance, enterprise deployments unlock advanced capabilities including adaptive load balancing, clustering, guardrails, MCP gateway, and other features designed for enterprise-grade scale and reliability.&lt;/p&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/maximhq/bifrost/dev/.github/assets/features.png&quot; alt=&quot;Book a Demo&quot; width=&quot;100%&quot; style=&quot;margin-top:5px;&quot; /&gt; 
&lt;div align=&quot;center&quot; style=&quot;display: flex; flex-direction: column;&quot;&gt; 
 &lt;a href=&quot;https://calendly.com/maximai/bifrost-demo&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/maximhq/bifrost/dev/.github/assets/book-demo-button.png&quot; alt=&quot;Book a Demo&quot; width=&quot;170&quot; style=&quot;margin-top:5px;&quot; /&gt; &lt;/a&gt; 
 &lt;div&gt; 
  &lt;a href=&quot;https://www.getmaxim.ai/bifrost/enterprise&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Explore enterprise capabilities&lt;/a&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Key Features&lt;/h2&gt; 
&lt;h3&gt;Core Infrastructure&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/providers/supported-providers/overview&quot;&gt;Unified Interface&lt;/a&gt;&lt;/strong&gt; - Single OpenAI-compatible API for all providers&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/gateway/provider-configuration&quot;&gt;Multi-Provider Support&lt;/a&gt;&lt;/strong&gt; - OpenAI, Anthropic, AWS Bedrock, Google Vertex, Azure, Cerebras, Cohere, Mistral, Ollama, Groq, and more&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/retries-and-fallbacks&quot;&gt;Automatic Fallbacks&lt;/a&gt;&lt;/strong&gt; - Seamless failover between providers and models with zero downtime&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/retries-and-fallbacks&quot;&gt;Load Balancing&lt;/a&gt;&lt;/strong&gt; - Intelligent request distribution across multiple API keys and providers&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Advanced Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/mcp/overview&quot;&gt;Model Context Protocol (MCP)&lt;/a&gt;&lt;/strong&gt; - Enable AI models to use external tools (filesystem, web search, databases)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/semantic-caching&quot;&gt;Semantic Caching&lt;/a&gt;&lt;/strong&gt; - Intelligent response caching based on semantic similarity to reduce costs and latency&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/gateway/streaming&quot;&gt;Multimodal Support&lt;/a&gt;&lt;/strong&gt; - Support for text, images, audio, and streaming, all behind a common interface.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/enterprise/custom-plugins&quot;&gt;Custom Plugins&lt;/a&gt;&lt;/strong&gt; - Extensible middleware architecture for analytics, monitoring, and custom logic&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/governance/virtual-keys&quot;&gt;Governance&lt;/a&gt;&lt;/strong&gt; - Usage tracking, rate limiting, and fine-grained access control&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Enterprise &amp;amp; Security&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/governance/budget-and-limits&quot;&gt;Budget Management&lt;/a&gt;&lt;/strong&gt; - Hierarchical cost control with virtual keys, teams, and customer budgets&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/enterprise/user-provisioning&quot;&gt;User Provisioning (OIDC)&lt;/a&gt;&lt;/strong&gt; - OAuth 2.0 / OIDC login with background directory sync for teams, roles, and business units&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/observability/default&quot;&gt;Observability&lt;/a&gt;&lt;/strong&gt; - Native Prometheus metrics, distributed tracing, and comprehensive logging&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/deployment-guides/config-json#environment-variable-references&quot;&gt;Secrets Management&lt;/a&gt;&lt;/strong&gt; - Secure API key management with environment variables and deployment secrets&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Developer Experience&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/gateway/setting-up&quot;&gt;Zero-Config Startup&lt;/a&gt;&lt;/strong&gt; - Start immediately with dynamic provider configuration&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/drop-in-replacement&quot;&gt;Drop-in Replacement&lt;/a&gt;&lt;/strong&gt; - Replace OpenAI/Anthropic/GenAI APIs with one line of code&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/integrations/what-is-an-integration&quot;&gt;SDK Integrations&lt;/a&gt;&lt;/strong&gt; - Native support for popular AI SDKs with zero code changes&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/gateway/provider-configuration&quot;&gt;Configuration Flexibility&lt;/a&gt;&lt;/strong&gt; - Web UI, API-driven, or file-based configuration options&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Repository Structure&lt;/h2&gt; 
&lt;p&gt;Bifrost uses a modular architecture for maximum flexibility:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;bifrost/
├── npx/                 # NPX script for easy installation
├── core/                # Core functionality and shared components
│   ├── providers/       # Provider-specific implementations (OpenAI, Anthropic, etc.)
│   ├── schemas/         # Interfaces and structs used throughout Bifrost
│   └── bifrost.go       # Main Bifrost implementation
├── framework/           # Framework components for data persistence
│   ├── configstore/     # Configuration storage backends
│   ├── logstore/        # Request logging storage backends
│   └── vectorstore/     # Vector storages
├── transports/          # HTTP gateway and other interface layers
│   └── bifrost-http/    # HTTP transport implementation
├── ui/                  # Web interface for HTTP gateway
├── plugins/             # Extensible plugin system
│   ├── governance/      # Budget management and access control
│   ├── jsonparser/      # JSON parsing and manipulation utilities
│   ├── logging/         # Request logging and analytics
│   ├── maxim/           # Maxim&#39;s observability integration
│   ├── mocker/          # Mock responses for testing and development
│   ├── semanticcache/   # Intelligent response caching
│   └── telemetry/       # Monitoring and observability
├── docs/                # Documentation and guides
└── tests/               # Comprehensive test suites
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Getting Started Options&lt;/h2&gt; 
&lt;p&gt;Choose the deployment method that fits your needs:&lt;/p&gt; 
&lt;h3&gt;1. Gateway (HTTP API)&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Language-agnostic integration, microservices, and production deployments&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# NPX - Get started in 30 seconds
npx -y @maximhq/bifrost

# Docker - Production ready
docker run -p 8080:8080 -v $(pwd)/data:/app/data maximhq/bifrost
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt; Web UI, real-time monitoring, multi-provider management, zero-config startup&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Learn More:&lt;/strong&gt; &lt;a href=&quot;https://docs.getbifrost.ai/quickstart/gateway/setting-up&quot;&gt;Gateway Setup Guide&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;2. Go SDK&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Direct Go integration with maximum performance and control&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/maximhq/bifrost/core
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt; Native Go APIs, embedded deployment, custom middleware integration&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Learn More:&lt;/strong&gt; &lt;a href=&quot;https://docs.getbifrost.ai/quickstart/go-sdk/setting-up&quot;&gt;Go SDK Guide&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;3. Drop-in Replacement&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Migrating existing applications with zero code changes&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-diff&quot;&gt;# OpenAI SDK
- base_url = &quot;https://api.openai.com&quot;
+ base_url = &quot;http://localhost:8080/openai&quot;

# Anthropic SDK
- base_url = &quot;https://api.anthropic.com&quot;
+ base_url = &quot;http://localhost:8080/anthropic&quot;

# Google GenAI SDK
- api_endpoint = &quot;https://generativelanguage.googleapis.com&quot;
+ api_endpoint = &quot;http://localhost:8080/genai&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Learn More:&lt;/strong&gt; &lt;a href=&quot;https://docs.getbifrost.ai/integrations/what-is-an-integration&quot;&gt;Integration Guides&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Performance&lt;/h2&gt; 
&lt;p&gt;Bifrost adds virtually zero overhead to your AI requests. In sustained 5,000 RPS benchmarks, the gateway added only &lt;strong&gt;11 µs&lt;/strong&gt; of overhead per request.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Metric&lt;/th&gt; 
   &lt;th&gt;t3.medium&lt;/th&gt; 
   &lt;th&gt;t3.xlarge&lt;/th&gt; 
   &lt;th&gt;Improvement&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Added latency (Bifrost overhead)&lt;/td&gt; 
   &lt;td&gt;59 µs&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;11 µs&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;-81%&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Success rate @ 5k RPS&lt;/td&gt; 
   &lt;td&gt;100%&lt;/td&gt; 
   &lt;td&gt;100%&lt;/td&gt; 
   &lt;td&gt;No failed requests&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Avg. queue wait time&lt;/td&gt; 
   &lt;td&gt;47 µs&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;1.67 µs&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;-96%&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Avg. request latency (incl. provider)&lt;/td&gt; 
   &lt;td&gt;2.12 s&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;1.61 s&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;-24%&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Key Performance Highlights:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Perfect Success Rate&lt;/strong&gt; - 100% request success rate even at 5k RPS&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Minimal Overhead&lt;/strong&gt; - Less than 15 µs additional latency per request&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Efficient Queuing&lt;/strong&gt; - Sub-microsecond average wait times&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Fast Key Selection&lt;/strong&gt; - ~10 ns to pick weighted API keys&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Complete Benchmarks:&lt;/strong&gt; &lt;a href=&quot;https://docs.getbifrost.ai/benchmarking/getting-started&quot;&gt;Performance Analysis&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Complete Documentation:&lt;/strong&gt; &lt;a href=&quot;https://docs.getbifrost.ai&quot;&gt;https://docs.getbifrost.ai&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Quick Start&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/gateway/setting-up&quot;&gt;Gateway Setup&lt;/a&gt; - HTTP API deployment in 30 seconds&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/go-sdk/setting-up&quot;&gt;Go SDK Setup&lt;/a&gt; - Direct Go integration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/quickstart/gateway/provider-configuration&quot;&gt;Provider Configuration&lt;/a&gt; - Multi-provider setup&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/providers/supported-providers/overview&quot;&gt;Multi-Provider Support&lt;/a&gt; - Single API for all providers&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/mcp/overview&quot;&gt;MCP Integration&lt;/a&gt; - External tool calling&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/semantic-caching&quot;&gt;Semantic Caching&lt;/a&gt; - Intelligent response caching&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/retries-and-fallbacks&quot;&gt;Fallbacks &amp;amp; Load Balancing&lt;/a&gt; - Reliability features&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/features/governance/budget-and-limits&quot;&gt;Budget Management&lt;/a&gt; - Cost control and governance&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Integrations&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/integrations/openai-sdk/overview&quot;&gt;OpenAI SDK&lt;/a&gt; - Drop-in OpenAI replacement&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/integrations/anthropic-sdk/overview&quot;&gt;Anthropic SDK&lt;/a&gt; - Drop-in Anthropic replacement&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/integrations/bedrock-sdk/overview&quot;&gt;AWS Bedrock SDK&lt;/a&gt; - AWS Bedrock integration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/integrations/genai-sdk/overview&quot;&gt;Google GenAI SDK&lt;/a&gt; - Drop-in GenAI replacement&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/integrations/litellm-sdk&quot;&gt;LiteLLM SDK&lt;/a&gt; - LiteLLM integration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/integrations/langchain-sdk&quot;&gt;LangChain SDK&lt;/a&gt; - LangChain integration&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Enterprise&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/enterprise/custom-plugins&quot;&gt;Custom Plugins&lt;/a&gt; - Extend functionality&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/enterprise/clustering&quot;&gt;Clustering&lt;/a&gt; - Multi-node deployment&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/deployment-guides/config-json#environment-variable-references&quot;&gt;Secrets Management&lt;/a&gt; - Secure key management&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.getbifrost.ai/deployment-guides/k8s&quot;&gt;Production Deployment&lt;/a&gt; - Scaling and monitoring&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Need Help?&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://discord.gg/exN5KAydbU&quot;&gt;Join our Discord&lt;/a&gt;&lt;/strong&gt; for community support and discussions.&lt;/p&gt; 
&lt;p&gt;Get help with:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Quick setup assistance and troubleshooting&lt;/li&gt; 
 &lt;li&gt;Best practices and configuration tips&lt;/li&gt; 
 &lt;li&gt;Community discussions and support&lt;/li&gt; 
 &lt;li&gt;Real-time help with integrations&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;We welcome contributions of all kinds! See our &lt;a href=&quot;https://docs.getbifrost.ai/contributing/setting-up-repo&quot;&gt;Contributing Guide&lt;/a&gt; for:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Setting up the development environment&lt;/li&gt; 
 &lt;li&gt;Code conventions and best practices&lt;/li&gt; 
 &lt;li&gt;How to submit pull requests&lt;/li&gt; 
 &lt;li&gt;Building and testing locally&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For development requirements and build instructions, see our &lt;a href=&quot;https://docs.getbifrost.ai/contributing/setting-up-repo#development-environment-setup&quot;&gt;Development Setup Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This project is licensed under the Apache 2.0 License - see the &lt;a href=&quot;https://raw.githubusercontent.com/maximhq/bifrost/dev/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file for details.&lt;/p&gt; 
&lt;p&gt;Built with ❤️ by &lt;a href=&quot;https://github.com/maximhq&quot;&gt;Maxim&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/6b1e2e8ba05b0db6b7e9c40d357e2d5d3b8aa523c39fcdec553a0e58d08aaa05/maximhq/bifrost" medium="image" />
      
    </item>
    
    <item>
      <title>amir20/dozzle</title>
      <link>https://github.com/amir20/dozzle</link>
      <description>&lt;p&gt;Realtime log viewer for containers. Supports Docker, Swarm and K8s.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://dozzle.dev/&quot;&gt;https://dozzle.dev/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/amir20/dozzle/master/assets/logo.svg?sanitize=true&quot; alt=&quot;Dozzle Logo&quot; width=&quot;200&quot; /&gt; &lt;/p&gt; 
&lt;h1&gt;Dozzle - &lt;a href=&quot;https://dozzle.dev/&quot;&gt;dozzle.dev&lt;/a&gt;&lt;/h1&gt; 
&lt;p&gt;Dozzle is a lightweight, web-based application for monitoring Docker logs in real time. It doesn&#39;t store any log files—it&#39;s designed purely for live log viewing.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/66a7b4b2-d6c9-4fca-ab04-aef6cd7c0c31&quot;&gt;https://github.com/user-attachments/assets/66a7b4b2-d6c9-4fca-ab04-aef6cd7c0c31&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://hub.docker.com/r/amir20/dozzle/&quot;&gt;&lt;img src=&quot;https://img.shields.io/docker/image-size/amir20/dozzle&quot; alt=&quot;Docker Image Size (latest by date)&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hub.docker.com/r/amir20/dozzle/&quot;&gt;&lt;img src=&quot;https://img.shields.io/docker/pulls/amir20/dozzle.svg?sanitize=true&quot; alt=&quot;Docker Pulls&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hub.docker.com/r/amir20/dozzle/&quot;&gt;&lt;img src=&quot;https://img.shields.io/docker/v/amir20/dozzle?sort=semver&quot; alt=&quot;Docker Version&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://github.com/amir20/dozzle/workflows/Test/badge.svg?sanitize=true&quot; alt=&quot;Test&quot; /&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;If you like Dozzle, check out &lt;a href=&quot;https://github.com/amir20/dtop&quot;&gt;&lt;code&gt;dtop&lt;/code&gt;&lt;/a&gt;, a top-like application for monitoring Docker containers. It integrates with Dozzle to link directly to container logs.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Intelligent fuzzy search for container names&lt;/li&gt; 
 &lt;li&gt;Search logs using regex&lt;/li&gt; 
 &lt;li&gt;Search logs using &lt;a href=&quot;https://dozzle.dev/guide/sql-engine&quot;&gt;SQL queries&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Small memory footprint&lt;/li&gt; 
 &lt;li&gt;Split screen for viewing multiple logs&lt;/li&gt; 
 &lt;li&gt;Live stats with memory and CPU usage&lt;/li&gt; 
 &lt;li&gt;Multi-user &lt;a href=&quot;https://dozzle.dev/guide/authentication&quot;&gt;authentication&lt;/a&gt; with support for forward proxy authorization&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dozzle.dev/guide/swarm-mode&quot;&gt;Swarm mode&lt;/a&gt; support&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dozzle.dev/guide/agent&quot;&gt;Agent mode&lt;/a&gt; for monitoring multiple Docker hosts&lt;/li&gt; 
 &lt;li&gt;Dark mode&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Dozzle has been tested with hundreds of containers. However, it doesn&#39;t support offline searching. Products like &lt;a href=&quot;https://www.loggly.com&quot;&gt;Loggly&lt;/a&gt;, &lt;a href=&quot;https://papertrailapp.com&quot;&gt;Papertrail&lt;/a&gt;, or &lt;a href=&quot;https://www.elastic.co/products/kibana&quot;&gt;Kibana&lt;/a&gt; are better suited for full search capabilities.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;Dozzle is a small container (7 MB compressed). Pull the latest release with:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker pull amir20/dozzle:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Running Dozzle&lt;/h3&gt; 
&lt;p&gt;The simplest way to use Dozzle is to run the Docker container. Mount the Docker Unix socket with &lt;code&gt;--volume&lt;/code&gt; to &lt;code&gt;/var/run/docker.sock&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker run --name dozzle -d --volume=/var/run/docker.sock:/var/run/docker.sock -v dozzle_data:/data -p 8080:8080 amir20/dozzle:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Dozzle will be available at &lt;a href=&quot;http://localhost:8080/&quot;&gt;http://localhost:8080/&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Here is a Docker Compose example:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;services:
  dozzle:
    container_name: dozzle
    image: amir20/dozzle:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dozzle_data:/data
    ports:
      - 8080:8080
volumes:
  dozzle_data:
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For advanced options like &lt;a href=&quot;https://dozzle.dev/guide/authentication&quot;&gt;authentication&lt;/a&gt;, &lt;a href=&quot;https://dozzle.dev/guide/remote-hosts&quot;&gt;remote hosts&lt;/a&gt;, or common &lt;a href=&quot;https://dozzle.dev/guide/faq&quot;&gt;questions&lt;/a&gt;, see the documentation at &lt;a href=&quot;https://dozzle.dev/guide/getting-started&quot;&gt;dozzle.dev&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Image Tags&lt;/h3&gt; 
&lt;p&gt;Images are published to both &lt;a href=&quot;https://hub.docker.com/r/amir20/dozzle&quot;&gt;Docker Hub&lt;/a&gt; and &lt;a href=&quot;https://github.com/amir20/dozzle/pkgs/container/dozzle&quot;&gt;ghcr.io&lt;/a&gt; with identical tags.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Tag&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;latest&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Most recent release. Recommended for most users.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;v10.6.15&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;An exact release. Pin this for reproducible deployments.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;v10.6&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Latest patch within that minor version. Picks up bug fixes only.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;v10&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Latest release within that major version. Picks up new features too.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;alpine&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Same as &lt;code&gt;latest&lt;/code&gt;, but on an Alpine base instead of &lt;code&gt;scratch&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;v10.6.15-alpine&lt;/code&gt;, &lt;code&gt;v10.6-alpine&lt;/code&gt;, &lt;code&gt;v10-alpine&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alpine variants of the version tags above.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;master&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Built from the &lt;code&gt;master&lt;/code&gt; branch on every push. Unreleased and unstable.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;pr-1234&lt;/code&gt;, &lt;code&gt;pr-1234-alpine&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Built from pull request #1234, for testing a fix before it ships.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The default images are built &lt;code&gt;FROM scratch&lt;/code&gt; and contain only the Dozzle binary, which is why they are around 7 MB compressed. That also means there is no shell inside them. Use the &lt;code&gt;alpine&lt;/code&gt; variants only if something in your setup needs one, most commonly platforms that bind-mount a &lt;code&gt;#!/bin/sh&lt;/code&gt; wrapper over the container entrypoint such as Unraid&#39;s per-container Tailscale toggle. See the &lt;a href=&quot;https://dozzle.dev/guide/faq&quot;&gt;FAQ&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;Avoid &lt;code&gt;latest&lt;/code&gt; and &lt;code&gt;master&lt;/code&gt; in production. &lt;code&gt;latest&lt;/code&gt; moves on every release and &lt;code&gt;master&lt;/code&gt; is unreleased code.&lt;/p&gt; 
&lt;h2&gt;Swarm Mode&lt;/h2&gt; 
&lt;p&gt;Dozzle works with Docker Swarm. You can run Dozzle as a global service:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker service create --name dozzle --env DOZZLE_MODE=swarm --mode global --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock -p 8080:8080 amir20/dozzle:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://dozzle.dev/guide/swarm-mode&quot;&gt;Swarm Mode&lt;/a&gt; documentation for more details.&lt;/p&gt; 
&lt;h2&gt;Agent Mode&lt;/h2&gt; 
&lt;p&gt;Dozzle can monitor multiple Docker hosts. Run Dozzle in agent mode with:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ docker run -v /var/run/docker.sock:/var/run/docker.sock -p 7007:7007 amir20/dozzle:latest agent
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://dozzle.dev/guide/agent&quot;&gt;Agent Mode&lt;/a&gt; documentation for more details.&lt;/p&gt; 
&lt;h2&gt;Technical Details&lt;/h2&gt; 
&lt;p&gt;Dozzle uses automatic API negotiation, which works with most Docker configurations. Dozzle also works with &lt;a href=&quot;https://github.com/abiosoft/colima&quot;&gt;Colima&lt;/a&gt; and &lt;a href=&quot;https://podman.io/&quot;&gt;Podman&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Dozzle requires Docker Engine 19.03 or newer (API version 1.40+). Older daemons are not supported by the underlying Docker SDK.&lt;/p&gt; 
&lt;h3&gt;Installation on Podman&lt;/h3&gt; 
&lt;p&gt;By default, Podman doesn&#39;t have a background process, but you can enable the remote socket for Dozzle to work.&lt;/p&gt; 
&lt;p&gt;First, verify if your Podman installation has the remote socket enabled:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;podman info
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you see output like this under the remote socket key, it&#39;s already enabled:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  remoteSocket:
    exists: true
    path: /run/user/1000/podman/podman.sock
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If it&#39;s not enabled, follow &lt;a href=&quot;https://github.com/containers/podman/raw/main/docs/tutorials/socket_activation.md&quot;&gt;this tutorial&lt;/a&gt; to enable it.&lt;/p&gt; 
&lt;p&gt;Once the Podman remote socket is enabled, you can run Dozzle:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;podman run --volume=/run/user/1000/podman/podman.sock:/var/run/docker.sock -d -p 8080:8080 docker.io/amir20/dozzle:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Nothing else is needed. Dozzle works out a stable host id for Podman on its own, since Podman is daemonless and has no engine identity to report.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Older versions of this page told you to create a &lt;code&gt;/var/lib/docker/engine-id&lt;/code&gt; file to prevent &lt;code&gt;host not found&lt;/code&gt; errors. That never worked. Podman&#39;s Docker-compatible &lt;code&gt;/info&lt;/code&gt; endpoint does not read any file, it returns a new random UUID on every call, so Dozzle now derives the id instead. You can delete the file.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;For more details, see &lt;a href=&quot;https://raw.githubusercontent.com/amir20/dozzle/master/docs/guide/podman.md&quot;&gt;Podman Info&lt;/a&gt; or the &lt;a href=&quot;https://raw.githubusercontent.com/amir20/dozzle/master/docs/guide/faq.md#i-am-seeing-host-not-found-error-in-the-logs-how-do-i-fix-it&quot;&gt;FAQ&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Security&lt;/h2&gt; 
&lt;p&gt;Dozzle supports file-based authentication and forward proxy authentication with tools like &lt;a href=&quot;https://www.authelia.com/&quot;&gt;Authelia&lt;/a&gt;. See the documentation at &lt;a href=&quot;https://dozzle.dev/guide/authentication&quot;&gt;https://dozzle.dev/guide/authentication&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Analytics&lt;/h2&gt; 
&lt;p&gt;Dozzle collects anonymous user configurations using Google Analytics. Why? Dozzle is an open source project with no funding, so there&#39;s no time for formal user studies. Analytics help prioritize features and fixes based on how people use Dozzle. This data is completely public and can be viewed live on the &lt;a href=&quot;https://datastudio.google.com/s/naeIu0MiWsY&quot;&gt;Data Studio dashboard&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;To disable analytics, use the &lt;code&gt;--no-analytics&lt;/code&gt; flag.&lt;/p&gt; 
&lt;h2&gt;Environment Variables and Configuration&lt;/h2&gt; 
&lt;p&gt;Dozzle follows the &lt;a href=&quot;https://12factor.net/&quot;&gt;12-factor&lt;/a&gt; model. Configuration can be done via CLI flags or environment variables. See the documentation at &lt;a href=&quot;https://dozzle.dev/guide/supported-env-vars&quot;&gt;dozzle.dev/guide/supported-env-vars&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;There are many ways to support Dozzle:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Use it! Write about it! Star it! If you love Dozzle, drop me a line and tell me what you love.&lt;/li&gt; 
 &lt;li&gt;Blog about Dozzle to spread the word. If you&#39;re good at writing, send PRs to improve the documentation at &lt;a href=&quot;https://dozzle.dev/&quot;&gt;dozzle.dev&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Sponsor my work at &lt;a href=&quot;https://www.buymeacoffee.com/amirraminfar&quot;&gt;https://www.buymeacoffee.com/amirraminfar&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.buymeacoffee.com/amirraminfar&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png&quot; alt=&quot;Buy Me A Coffee&quot; style=&quot;height: 60px !important;width: 217px !important;&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/amir20/dozzle/master/LICENSE&quot;&gt;MIT&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Building&lt;/h2&gt; 
&lt;p&gt;Want to contribute? Great! Dozzle has two parts: a &lt;strong&gt;Go backend&lt;/strong&gt; that talks to Docker, and a &lt;strong&gt;Vue frontend&lt;/strong&gt; that runs in the browser. You don&#39;t need to know both — pick the side that matches what you want to change. For documentation fixes, no setup is needed at all; just edit the file on GitHub.&lt;/p&gt; 
&lt;h3&gt;1. Install the prerequisites&lt;/h3&gt; 
&lt;p&gt;You&#39;ll need &lt;a href=&quot;https://go.dev/doc/install&quot;&gt;Go&lt;/a&gt; (1.25+), &lt;a href=&quot;https://nodejs.org/en/download/&quot;&gt;Node.js&lt;/a&gt; (with &lt;a href=&quot;https://pnpm.io/installation&quot;&gt;pnpm&lt;/a&gt;), and &lt;a href=&quot;https://grpc.io/docs/protoc-installation/&quot;&gt;protoc&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;On macOS, you can install everything in one go:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install go node pnpm protobuf
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;On Linux (Debian/Ubuntu):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt install golang nodejs protobuf-compiler
npm install -g pnpm
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;On Windows, we recommend using &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/wsl/install&quot;&gt;WSL2&lt;/a&gt; and following the Linux instructions.&lt;/p&gt; 
&lt;h3&gt;2. Clone and set up&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/amir20/dozzle.git
cd dozzle
pnpm install                # installs frontend dependencies
go install tool             # installs Go build tools listed in go.mod (air, protoc-gen-go, etc.)
make generate               # generates TLS certificates and protobuf code (only needed once)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;3. Start the dev server&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;make dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Open &lt;a href=&quot;http://localhost:3100&quot;&gt;http://localhost:3100&lt;/a&gt; — you should see the Dozzle UI connected to your local Docker. Both the frontend and backend reload automatically when you save a file.&lt;/p&gt; 
&lt;h3&gt;Making your first change&lt;/h3&gt; 
&lt;p&gt;Try editing &lt;code&gt;assets/pages/index.vue&lt;/code&gt; and saving — the browser updates instantly. For backend changes, edit any &lt;code&gt;.go&lt;/code&gt; file and the server will restart on its own.&lt;/p&gt; 
&lt;h3&gt;Troubleshooting&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Nothing shows up at localhost:3100&lt;/strong&gt; — make sure Docker is running and the socket is accessible at &lt;code&gt;/var/run/docker.sock&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;make generate&lt;/code&gt; fails&lt;/strong&gt; — confirm &lt;code&gt;protoc&lt;/code&gt; is on your PATH (&lt;code&gt;protoc --version&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Still stuck?&lt;/strong&gt; Open a question in &lt;a href=&quot;https://github.com/amir20/dozzle/discussions&quot;&gt;GitHub Discussions&lt;/a&gt; — we&#39;re happy to help.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Adding App Icons&lt;/h2&gt; 
&lt;p&gt;Dozzle shows a logo next to containers whose image it recognizes. Icons are vendored from &lt;a href=&quot;https://github.com/homarr-labs/dashboard-icons&quot;&gt;homarr-labs/dashboard-icons&lt;/a&gt; into &lt;a href=&quot;https://raw.githubusercontent.com/amir20/dozzle/master/assets/icons/apps/&quot;&gt;&lt;code&gt;assets/icons/apps/&lt;/code&gt;&lt;/a&gt;, and matching happens in &lt;code&gt;assets/utils/appIcons.ts&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The repo ships an &lt;code&gt;add-app-icon&lt;/code&gt; skill in &lt;code&gt;.claude/skills/&lt;/code&gt;. To add icons with an AI coding agent, paste this prompt and fill in the images:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Use the add-app-icon skill in .claude/skills/add-app-icon/SKILL.md to add app icons
for these container images: &amp;lt;image1&amp;gt;, &amp;lt;image2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/155297903/cbdcd180-2571-11ea-9a3f-073207ffc1c5" medium="image" />
      
    </item>
    
    <item>
      <title>Gentleman-Programming/gentle-ai</title>
      <link>https://github.com/Gentleman-Programming/gentle-ai</link>
      <description>&lt;p&gt;Gentle-AI configures the AI coding agents you already use: Claude Code, Cursor, OpenCode, Codex, Pi, and more. Choose persistent memory, Spec-Driven Development, curated skills, MCP servers, personas, and optional bounded review. Open source, no agent lock-in.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://gentle-ai.gentlemanprogramming.com/&quot;&gt;https://gentle-ai.gentlemanprogramming.com/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a id=&quot;top&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;img width=&quot;100%&quot; alt=&quot;Gentle-AI neon rose banner&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/brand/gentle-ai-banner.png&quot; /&gt; 
 &lt;h1&gt;Gentle-AI™&lt;/h1&gt; 
 &lt;p&gt;&lt;strong&gt;The deterministic engineering environment for the AI agent you already use.&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt; &lt;a href=&quot;https://github.com/Gentleman-Programming/gentle-ai/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/Gentleman-Programming/gentle-ai?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;color=F095C8&quot; alt=&quot;Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/Gentleman-Programming/gentle-ai/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/Gentleman-Programming/gentle-ai?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;color=F095C8&quot; alt=&quot;Stars&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/agents-16-F095C8?style=for-the-badge&amp;amp;labelColor=1A1218&quot; alt=&quot;16 agents&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/macOS%20%C2%B7%20Linux%20%C2%B7%20Windows-D7A0B8?style=for-the-badge&amp;amp;labelColor=1A1218&quot; alt=&quot;Platform&quot; /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/MIT-D7A0B8?style=for-the-badge&amp;amp;labelColor=1A1218&quot; alt=&quot;License: MIT&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
 &lt;p&gt; &lt;a href=&quot;https://gentlemanprogramming.com/&quot;&gt;&lt;strong&gt;Website&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/quickstart.md&quot;&gt;&lt;strong&gt;Quickstart&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/intended-usage.md&quot;&gt;&lt;strong&gt;Docs&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://gentle-ai-wiki.gentlemanprogramming.com/&quot;&gt;&lt;strong&gt;Wiki&lt;/strong&gt;&lt;/a&gt; &lt;/p&gt; 
 &lt;br /&gt; 
 &lt;p&gt; Your agent writes code, then forgets everything. It has no opinion about your project, and no way to prove what it did beyond asking you to read every line. &lt;strong&gt;Gentle-AI gives it memory, a workflow, and evidence.&lt;/strong&gt; &lt;/p&gt; 
 &lt;br /&gt; 
 &lt;!--
  HERO SLOT — the only animation on this page. Features is all still: four
  diagrams for the concepts, two captures as proof the thing runs. Motion is
  spent once, here, right after the pitch lands.

  Uncomment when docs/assets/features/hero-pi.gif exists. It is a real-time capture
  of the complete Pi startup: banner, extensions, skills and startup output, never
  trimmed. A stripped startup does not look like the real thing.

&lt;img width=&quot;100%&quot; src=&quot;docs/assets/features/hero-pi.gif&quot; alt=&quot;Gentle-AI starting up inside Pi&quot; /&gt;

&lt;br/&gt;
--&gt; 
 &lt;p&gt;&lt;sub&gt;&lt;strong&gt;If Gentle-AI made your agent worth trusting, a star helps other people find it.&lt;/strong&gt;&lt;/sub&gt;&lt;/p&gt; 
 &lt;!--
  sealed_token is a GitHub fine-grained token encrypted against Star History&#39;s
  public key, so only the encrypted value is published here. It is required
  because GitHub restricted the stargazers API to a repository&#39;s admins and
  collaborators on 2026-06-30; without it the chart renders an error placeholder.
  Regenerate it at https://www.star-history.com/?repos=Gentleman-Programming%2Fgentle-ai&amp;type=date&amp;legend=top-left
--&gt; 
 &lt;a href=&quot;https://www.star-history.com/?repos=Gentleman-Programming%2Fgentle-ai&amp;amp;type=date&amp;amp;legend=top-left&quot;&gt; 
  &lt;picture&gt; 
   &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://api.star-history.com/chart?repos=Gentleman-Programming%2Fgentle-ai&amp;amp;type=date&amp;amp;theme=dark&amp;amp;legend=top-left&amp;amp;sealed_token=zwrd_DfwYZeJU7nhGYNtREEheKWYEslW_uzrqORlZ36v-JSMepdqGLkKExp1M-xbNq6t-ebVS5iM3WoPDO26tXbSGkjXC2Jo3kHQ3uNzlRkCrWoqRHkPVQXvosKciY109ObiwGV1z8aajyedcloppmekCGrvVKJb6KWxGLXW_mHcRAVIBZUOa4SzW75D&quot; /&gt; 
   &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://api.star-history.com/chart?repos=Gentleman-Programming%2Fgentle-ai&amp;amp;type=date&amp;amp;legend=top-left&amp;amp;sealed_token=zwrd_DfwYZeJU7nhGYNtREEheKWYEslW_uzrqORlZ36v-JSMepdqGLkKExp1M-xbNq6t-ebVS5iM3WoPDO26tXbSGkjXC2Jo3kHQ3uNzlRkCrWoqRHkPVQXvosKciY109ObiwGV1z8aajyedcloppmekCGrvVKJb6KWxGLXW_mHcRAVIBZUOa4SzW75D&quot; /&gt; 
   &lt;img width=&quot;620&quot; alt=&quot;Star History Chart&quot; src=&quot;https://api.star-history.com/chart?repos=Gentleman-Programming%2Fgentle-ai&amp;amp;type=date&amp;amp;legend=top-left&amp;amp;sealed_token=zwrd_DfwYZeJU7nhGYNtREEheKWYEslW_uzrqORlZ36v-JSMepdqGLkKExp1M-xbNq6t-ebVS5iM3WoPDO26tXbSGkjXC2Jo3kHQ3uNzlRkCrWoqRHkPVQXvosKciY109ObiwGV1z8aajyedcloppmekCGrvVKJb6KWxGLXW_mHcRAVIBZUOa4SzW75D&quot; /&gt; 
  &lt;/picture&gt; &lt;/a&gt; 
 &lt;br /&gt; 
 &lt;p&gt;&lt;sub&gt;&lt;strong&gt;WORKS WITH THE AGENT YOU ALREADY HAVE&lt;/strong&gt;&lt;/sub&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#pi&quot;&gt;Pi&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#opencode&quot;&gt;OpenCode&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#claude-code&quot;&gt;Claude Code&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#codex&quot;&gt;Codex&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#cursor&quot;&gt;Cursor&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#vs-code-copilot&quot;&gt;VS Code Copilot&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#gemini-cli&quot;&gt;Gemini CLI&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#kilo-code&quot;&gt;Kilo Code&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt; &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#kimi-code&quot;&gt;Kimi Code&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#kiro-ide&quot;&gt;Kiro IDE&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#qwen-code&quot;&gt;Qwen Code&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#hermes&quot;&gt;Hermes&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#antigravity&quot;&gt;Antigravity&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#windsurf&quot;&gt;Windsurf&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#openclaw&quot;&gt;OpenClaw&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md#trae&quot;&gt;Trae&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;sub&gt;16 integrations · native configuration · &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md&quot;&gt;compare capabilities →&lt;/a&gt;&lt;/sub&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt;
 &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/brand/rose.png&quot; width=&quot;28&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Engram™ — Keep your project context&lt;/h3&gt; 
&lt;img width=&quot;100%&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/diagrams/engram-memory.svg?sanitize=true&quot; alt=&quot;Three work sessions separated by a restart and by context compaction. Each break cuts the session layer but stops at the memory layer underneath. The first session saves a decision, the next one asks memory before asking you, and weeks later the same question is answered from memory instead of by re-reading the repository.&quot; /&gt; 
&lt;p&gt;The cost of a fresh session is not the tokens — it is you, re-explaining the same decisions every morning. Engram removes that: your agent writes down what it learns as it goes and reaches for it before it reaches for you, so context accumulates instead of resetting.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/engram.md&quot;&gt;Docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;SDD — Give each change a clear path&lt;/h3&gt; 
&lt;img width=&quot;100%&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/diagrams/sdd-cycle.svg?sanitize=true&quot; alt=&quot;The SDD cycle in three bands. Understand: Explore, then optional Research. Plan: Proposal, Spec, Design and Tasks, each writing its own markdown file. Build: Apply writes code and tests, Verify checks the evidence against the spec, Archive merges the specs and closes the cycle.&quot; /&gt; 
&lt;p&gt;Every phase leaves a file on disk you can open, argue with, and correct — so the plan is reviewable before a single line of code exists. TDD (test-driven development) belongs in Apply when it fits, because that is the first point where there is a spec to test against. Verify then runs as its own step against that spec, not as a self-report from whatever wrote the code, so you can see what was actually checked.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/intended-usage.md&quot;&gt;Docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;RDD — Check finished work at the right depth&lt;/h3&gt; 
&lt;img width=&quot;100%&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/diagrams/rdd-review.svg?sanitize=true&quot; alt=&quot;How RDD checks a finished change. The exact change is frozen to a lineage, revision and target, then a read-only risk assessment picks the depth: passive gets a structural readback with zero reviewer lenses, medium gets one focused lens, high gets the canonical 4R — Risk, Resilience, Readability and Reliability. At most one bounded correction is allowed, and one exact acknowledgement closes the transaction. Delivery stays human-owned.&quot; /&gt; 
&lt;p&gt;Receipt-Driven Development (RDD) is opt-in and stays off until you enable it. Its point is that a review cannot drift: the candidate is frozen before anything reads it, so the evidence belongs to the exact version you are about to rely on — not to whatever the worktree looked like a moment later. The depth comes from that frozen candidate rather than from the model&#39;s judgment, and the result is informational. Commit, push and release stay your call.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/review-integration.md&quot;&gt;Docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Deterministic by design — Know the next valid step&lt;/h3&gt; 
&lt;img width=&quot;100%&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/diagrams/deterministic.svg?sanitize=true&quot; alt=&quot;A different agent, a different model and a brand-new session all converge on the gentle-ai binary. It reads the change state from files on disk and returns the only valid next transition, so no model votes on what comes next. The answer is always one of four public states: Working, Checking, Ready, or Needs your decision.&quot; /&gt; 
&lt;p&gt;A model that guesses the next step guesses differently tomorrow, and differently again for your teammate. That is the gap between a workflow and a suggestion. The &lt;strong&gt;&lt;code&gt;gentle-ai&lt;/code&gt; binary&lt;/strong&gt; owns native SDD status and RDD review transitions, and because it reads state from files rather than from a context window, two people on two machines get the same answer — and so does the same person a month later.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/trigger-rules.md&quot;&gt;Docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Gentle Shell — A complete workspace for Pi&lt;/h3&gt; 
&lt;img width=&quot;100%&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/features/gentle-shell.png&quot; alt=&quot;Gentle Shell running an SDD sub-agent, with the todo list and live context and spend information&quot; /&gt; 
&lt;p&gt;&lt;strong&gt;The way Gentle-AI was intended.&lt;/strong&gt; Gentle-AI brings our native Pi extensions together in one focused development environment: orchestrate specialized agents, monitor usage for supported provider accounts, and review code changes in a built-in diff.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/pi.md&quot;&gt;Docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;16 agents — Keep the agent you already use&lt;/h3&gt; 
&lt;img width=&quot;100%&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/features/agents.png&quot; alt=&quot;The installer configuring multiple agents&quot; /&gt; 
&lt;p&gt;Gentle-AI brings its shared workflow to Pi, OpenCode, Claude Code, Codex, and twelve more agents. Each integration uses that agent&#39;s native capabilities, so available features such as delegation and RDD review can differ.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md&quot;&gt;Docs →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Also in the box&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Component&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;What it does&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Skills library&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Loaded automatically when the task matches&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Context7 MCP&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional, selectable live framework and library documentation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;CodeGraph&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Read-only symbol graph of your codebase&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Security deny-list&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Blocks &lt;code&gt;~/.ssh&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt; and credential files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Config backups&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Snapshotted before every single write&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Doctor&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;gentle-ai doctor&lt;/code&gt; — read-only health report&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Personas&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional personas; Gentleman is a caring but rigorous mentor who guides you toward your goal&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Themes&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Gentleman and Gentleman-Cute&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Per-phase model assignment&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Assign a model to each phase in Pi and OpenCode&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Every component, skill and preset: &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/components.md&quot;&gt;Full breakdown →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;div align=&quot;right&quot;&gt;
 &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/#top&quot;&gt;Back to top&lt;/a&gt;
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt;
 &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/brand/rose.png&quot; width=&quot;28&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt; 
&lt;h2&gt;Get started&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# macOS (Homebrew)
brew install gentleman-programming/tap/gentle-ai

# macOS / Linux (curl)
curl -fsSL https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/scripts/install.sh | bash

# Windows (PowerShell) — source install, needs Go 1.25.10+
go install github.com/gentleman-programming/gentle-ai/v2/cmd/gentle-ai@latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gentle-ai          # pick your agents, components and persona
gentle-ai doctor   # verify — read-only, changes nothing
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then use your agent normally. Your configs are snapshotted before every write, and &lt;strong&gt;Gentle-AI never installs an AI agent for you&lt;/strong&gt; — it configures what you already have.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Beta channel, signature verification and per-distro prerequisites: &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/quickstart.md&quot;&gt;Quickstart →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;div align=&quot;right&quot;&gt;
 &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/#top&quot;&gt;Back to top&lt;/a&gt;
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt;
 &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/brand/rose.png&quot; width=&quot;28&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Where to go&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;What you&#39;ll find&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/intended-usage.md&quot;&gt;Intended Usage&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;The mental model. If you read one page, read this one.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/quickstart.md&quot;&gt;Quickstart&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/usage.md&quot;&gt;Usage&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Install, prerequisites, every CLI command and flag&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/agents.md&quot;&gt;Agents&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Feature matrix and per-agent notes for all 16&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/trigger-rules.md&quot;&gt;Routing&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;How the agent picks direct, delegated or SDD&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/review-integration.md&quot;&gt;Review&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/architecture/organic-rdd.md&quot;&gt;Architecture&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;The RDD contract, lifecycle and threat model&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/engram.md&quot;&gt;Engram&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/components.md&quot;&gt;Components&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Memory commands, skills, presets and personas&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/CONTRIBUTING.md&quot;&gt;Contributing&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/CODEBASE-GUIDE.md&quot;&gt;Codebase Guide&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Extend or contribute&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/telemetry.md&quot;&gt;Telemetry&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;What we count, and how to turn it off&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;div align=&quot;right&quot;&gt;
 &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/#top&quot;&gt;Back to top&lt;/a&gt;
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt;
 &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/brand/rose.png&quot; width=&quot;28&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;p&gt;Everything labelled &lt;a href=&quot;https://github.com/Gentleman-Programming/gentle-ai/issues?q=is%3Aissue+is%3Aopen+label%3Aup-for-grabs&quot;&gt;&lt;code&gt;up-for-grabs&lt;/code&gt;&lt;/a&gt; is scoped, approved and unclaimed — pick one and it&#39;s yours.&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/community-roadmap.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Community%20Roadmap-F095C8?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;logo=readthedocs&amp;amp;logoColor=F095C8&quot; alt=&quot;Community Roadmap&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/CONTRIBUTING.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Contributing%20Guide-F095C8?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;logo=git&amp;amp;logoColor=F095C8&quot; alt=&quot;Contributing Guide&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/CONTRIBUTORS.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Contributors-D7A0B8?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;logo=github&amp;amp;logoColor=D7A0B8&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; 
 &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/CONTRIBUTORS.md&quot;&gt; &lt;img width=&quot;100%&quot; src=&quot;https://contrib.rocks/image?repo=Gentleman-Programming/gentle-ai&amp;amp;columns=16&quot; alt=&quot;Gentle-AI contributors&quot; /&gt; &lt;/a&gt; 
 &lt;p&gt;&lt;sub&gt;This project exists because of these people.&lt;/sub&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;div align=&quot;right&quot;&gt;
 &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/#top&quot;&gt;Back to top&lt;/a&gt;
&lt;/div&gt; 
&lt;div align=&quot;center&quot;&gt;
 &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/brand/rose.png&quot; width=&quot;28&quot; alt=&quot;&quot; /&gt;
&lt;/div&gt; 
&lt;h2&gt;About the author&lt;/h2&gt; 
&lt;p&gt;Built by &lt;a href=&quot;https://github.com/Gentleman-Programming&quot;&gt;Alan Buscaglia&lt;/a&gt; (Gentleman Programming): 15 years of enterprise architecture, a community of thousands of developers testing these tools daily, and one rule for AI-assisted work — &lt;strong&gt;verifying beats generating&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;Teams adopting AI and finding it isn&#39;t working — resistance, everyone prompting their own way, no shared quality bar — can reach out about &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/consulting.md&quot;&gt;engagements built on these same open-source tools →&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://gentlemanprogramming.com/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Website-F095C8?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;logo=googlechrome&amp;amp;logoColor=F095C8&quot; alt=&quot;Website&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.youtube.com/@GentlemanProgramming&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/YouTube-F095C8?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;logo=youtube&amp;amp;logoColor=F095C8&quot; alt=&quot;YouTube&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/Gentleman-Programming&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/GitHub-D7A0B8?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;logo=github&amp;amp;logoColor=D7A0B8&quot; alt=&quot;GitHub&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;mailto:gentleman@ohmybitz.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Email-D7A0B8?style=for-the-badge&amp;amp;labelColor=1A1218&amp;amp;logo=maildotru&amp;amp;logoColor=D7A0B8&quot; alt=&quot;Email&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/docs/assets/brand/rose.png&quot; width=&quot;56&quot; alt=&quot;&quot; /&gt; 
 &lt;br /&gt; 
 &lt;h3&gt;Gentle-AI is crafted with Gentle-AI&lt;/h3&gt; 
 &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-MIT-F095C8?style=for-the-badge&amp;amp;labelColor=1A1218&quot; alt=&quot;License: MIT&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Trademark notice:&lt;/strong&gt; The Gentle AI™ and Engram™ names and logos are trademarks of Alan Buscaglia. Both marks are used throughout this document; the symbol appears on the first prominent mention of each, and this notice covers the rest. The MIT License applies to the code; it does not permit implying endorsement or official affiliation. See &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/gentle-ai/main/TRADEMARKS.md&quot;&gt;TRADEMARKS.md&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/33b7dd56145b4833993e9752cbc4e633d93292540d996440343bd8991c9f255a/Gentleman-Programming/gentle-ai" medium="image" />
      
    </item>
    
    <item>
      <title>argoproj/argo-cd</title>
      <link>https://github.com/argoproj/argo-cd</link>
      <description>&lt;p&gt;Declarative Continuous Deployment for Kubernetes&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://argo-cd.readthedocs.io&quot;&gt;https://argo-cd.readthedocs.io&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Releases:&lt;/strong&gt; &lt;a href=&quot;https://github.com/argoproj/argo-cd/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/argoproj/argo-cd?label=argo-cd&quot; alt=&quot;Release Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://artifacthub.io/packages/helm/argo/argo-cd&quot;&gt;&lt;img src=&quot;https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/argo-cd&quot; alt=&quot;Artifact HUB&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://slsa.dev&quot;&gt;&lt;img src=&quot;https://slsa.dev/images/gh-badge-level3.svg?sanitize=true&quot; alt=&quot;SLSA 3&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href=&quot;https://github.com/argoproj/argo-cd/actions?query=workflow%3A%22Integration+tests%22&quot;&gt;&lt;img src=&quot;https://github.com/argoproj/argo-cd/workflows/Integration%20tests/badge.svg?branch=master&quot; alt=&quot;Integration tests&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/argoproj/argo-cd&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/argoproj/argo-cd/branch/master/graph/badge.svg?sanitize=true&quot; alt=&quot;codecov&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bestpractices.coreinfrastructure.org/projects/4486&quot;&gt;&lt;img src=&quot;https://bestpractices.coreinfrastructure.org/projects/4486/badge&quot; alt=&quot;CII Best Practices&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://scorecard.dev/viewer/?uri=github.com/argoproj/argo-cd&quot;&gt;&lt;img src=&quot;https://api.securityscorecards.dev/projects/github.com/argoproj/argo-cd/badge&quot; alt=&quot;OpenSSF Scorecard&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Social:&lt;/strong&gt; &lt;a href=&quot;https://twitter.com/argoproj&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/argoproj?style=social&quot; alt=&quot;Twitter Follow&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://argoproj.github.io/community/join-slack&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/slack-argoproj-brightgreen.svg?logo=slack&quot; alt=&quot;Slack&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.linkedin.com/company/argoproj/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/LinkedIn-argoproj-blue.svg?logo=linkedin&quot; alt=&quot;LinkedIn&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bsky.app/profile/argoproj.bsky.social&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Bluesky-argoproj-blue.svg?style=social&amp;amp;logo=bluesky&quot; alt=&quot;Bluesky&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Argo CD - Declarative Continuous Delivery for Kubernetes&lt;/h1&gt; 
&lt;h2&gt;What is Argo CD?&lt;/h2&gt; 
&lt;p&gt;Argo CD is a declarative GitOps continuous delivery tool for Kubernetes.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/argoproj/argo-cd/master/docs/assets/argocd-ui.gif&quot; alt=&quot;Argo CD UI&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://youtu.be/0WAm0y2vLIo&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/0WAm0y2vLIo/0.jpg&quot; alt=&quot;Argo CD Demo&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Why Argo CD?&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Application definitions, configurations, and environments should be declarative and version controlled.&lt;/li&gt; 
 &lt;li&gt;Application deployment and lifecycle management should be automated, auditable, and easy to understand.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Who uses Argo CD?&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/argoproj/argo-cd/master/USERS.md&quot;&gt;Official Argo CD user list&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;To learn more about Argo CD &lt;a href=&quot;https://argo-cd.readthedocs.io/&quot;&gt;go to the complete documentation&lt;/a&gt;. Check live demo at &lt;a href=&quot;https://cd.apps.argoproj.io/&quot;&gt;https://cd.apps.argoproj.io/&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;h3&gt;Contribution, Discussion and Support&lt;/h3&gt; 
&lt;p&gt;You can reach the Argo CD community and developers via the following channels:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Q &amp;amp; A : &lt;a href=&quot;https://github.com/argoproj/argo-cd/discussions&quot;&gt;GitHub Discussions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Chat : &lt;a href=&quot;https://argoproj.github.io/community/join-slack&quot;&gt;The #argo-cd Slack channel&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Contributors Office Hours: &lt;a href=&quot;https://calendar.google.com/calendar/u/0/embed?src=argoproj@gmail.com&quot;&gt;Every Thursday&lt;/a&gt; | &lt;a href=&quot;https://docs.google.com/document/d/1xkoFkVviB70YBzSEa4bDnu-rUZ1sIFtwKKG1Uw8XsY8&quot;&gt;Agenda&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;User Community meeting: &lt;a href=&quot;https://calendar.google.com/calendar/u/0/embed?src=argoproj@gmail.com&quot;&gt;First Wednesday of the month&lt;/a&gt; | &lt;a href=&quot;https://docs.google.com/document/d/1ttgw98MO45Dq7ZUHpIiOIEfbyeitKHNfMjbY5dLLMKQ&quot;&gt;Agenda&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Participation in the Argo CD project is governed by the &lt;a href=&quot;https://github.com/cncf/foundation/raw/master/code-of-conduct.md&quot;&gt;CNCF Code of Conduct&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Blogs and Presentations&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/terrytangyuan/awesome-argo&quot;&gt;Awesome-Argo: A Curated List of Awesome Projects and Resources Related to Argo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://akuity.io/blog/secret-ingredients-of-continuous-delivery-at-enterprise-scale-with-argocd/&quot;&gt;Unveil the Secret Ingredients of Continuous Delivery at Enterprise Scale with Argo CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/avPUQin9kzU&quot;&gt;GitOps Without Pipelines With ArgoCD Image Updater&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/eEcgn_gU3SM&quot;&gt;Combining Argo CD (GitOps), Crossplane (Control Plane), And KubeVela (OAM)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/yrj4lmScKHQ&quot;&gt;How to Apply GitOps to Everything - Combining Argo CD and Crossplane&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/nkPoPaVzExY&quot;&gt;Couchbase - How To Run a Database Cluster in Kubernetes Using Argo CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/XNXJtxkUKeY&quot;&gt;Automation of Everything - How To Combine Argo Events, Workflows &amp;amp; Pipelines, CD, and Rollouts&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/cpAaI8p4R60&quot;&gt;Environments Based On Pull Requests (PRs): Using Argo CD To Apply GitOps Principles On Previews&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/vpWQeoaiRM4&quot;&gt;Argo CD: Applying GitOps Principles To Manage Production Environment In Kubernetes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://codefresh.io/continuous-deployment/creating-temporary-preview-environments-based-pull-requests-argo-cd-codefresh/&quot;&gt;Creating Temporary Preview Environments Based On Pull Requests With Argo CD And Codefresh&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=r50tRQjisxw&quot;&gt;Tutorial: Everything You Need To Become A GitOps Ninja&lt;/a&gt; 90m tutorial on GitOps and Argo CD.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.inovex.de/blog/spinnaker-vs-argo-cd-vs-tekton-vs-jenkins-x/&quot;&gt;Comparison of Argo CD, Spinnaker, Jenkins X, and Tekton&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.ibm.com/cloud/blog/simplify-and-automate-deployments-using-gitops-with-ibm-multicloud-manager-3-1-2&quot;&gt;Simplify and Automate Deployments Using GitOps with IBM Multicloud Manager 3.1.2&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://v0-6.kubeflow.org/docs/use-cases/gitops-for-kubeflow/&quot;&gt;GitOps for Kubeflow using Argo CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/webinar-series-gitops-tool-sets-on-kubernetes-with-circleci-and-argo-cd&quot;&gt;GitOps Toolsets on Kubernetes with CircleCI and Argo CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OdzH82VpMwI&amp;amp;feature=youtu.be&quot;&gt;CI/CD in Light Speed with K8s and Argo CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VXrGp5er1ZE&amp;amp;t=0s&amp;amp;index=135&amp;amp;list=PLj6h78yzYM2PZf9eA7bhWnIh_mK1vyOfU&quot;&gt;Machine Learning as Code&lt;/a&gt;. Among other things, describes how Kubeflow uses Argo CD to implement GitOPs for ML&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aWDIQMbp1cc&amp;amp;feature=youtu.be&amp;amp;t=1m4s&quot;&gt;Argo CD - GitOps Continuous Delivery for Kubernetes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2WSJF7d8dUg&amp;amp;feature=youtu.be&quot;&gt;Introduction to Argo CD : Kubernetes DevOps CI/CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://medium.com/riskified-technology/gitops-deployment-and-kubernetes-f1ab289efa4b&quot;&gt;GitOps Deployment and Kubernetes - using Argo CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://itnext.io/deploy-argo-cd-with-ingress-and-tls-in-three-steps-no-yaml-yak-shaving-required-bc536d401491&quot;&gt;Deploy Argo CD with Ingress and TLS in Three Steps: No YAML Yak Shaving Required&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://codefresh.io/events/cncf-member-webinar-gitops-continuous-delivery-argo-codefresh/&quot;&gt;GitOps Continuous Delivery with Argo and Codefresh&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://mjpitz.com/blog/2020/12/03/renovate-your-gitops/&quot;&gt;Stay up to date with Argo CD and Renovate&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.arthurkoziel.com/setting-up-argocd-with-helm/&quot;&gt;Setting up Argo CD with Helm&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://thenewstack.io/applied-gitops-with-argocd/&quot;&gt;Applied GitOps with Argo CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cncf.io/blog/2020/12/17/solving-configuration-drift-using-gitops-with-argo-cd/&quot;&gt;Solving configuration drift using GitOps with Argo CD&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://blogs.sap.com/2021/05/06/decentralized-gitops-over-environments/&quot;&gt;Decentralized GitOps over environments&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/AvLuplh1skA&quot;&gt;Getting Started with ArgoCD for GitOps Deployments&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://youtu.be/17894DTru2Y&quot;&gt;Using Argo CD &amp;amp; Datree for Stable Kubernetes CI/CD Deployments&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://amralaayassen.medium.com/how-to-create-argocd-applications-automatically-using-applicationset-automation-of-the-gitops-59455eaf4f72&quot;&gt;How to create Argo CD Applications Automatically using ApplicationSet? &quot;Automation of GitOps&quot;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.cncf.io/blog/2022/12/16/progressive-delivery-with-service-mesh-argo-rollouts-with-istio/&quot;&gt;Progressive Delivery with Service Mesh – Argo Rollouts with Istio&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/2a564ff74069b37407e5b3e8c9a00452065fc4294d0761e6f0e24f9a498beac4/argoproj/argo-cd" medium="image" />
      
    </item>
    
    <item>
      <title>QuantumNous/new-api</title>
      <link>https://github.com/QuantumNous/new-api</link>
      <description>&lt;p&gt;A unified AI model hub for aggregation &amp; distribution. It supports cross-converting various LLMs into OpenAI-compatible, Claude-compatible, or Gemini-compatible formats. A centralized gateway for personal and enterprise model management.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://www.newapi.ai&quot;&gt;https://www.newapi.ai&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/web/public/logo.png&quot; alt=&quot;new-api&quot; /&gt;&lt;/p&gt; 
 &lt;h1&gt;New API&lt;/h1&gt; 
 &lt;p&gt;🍥 &lt;strong&gt;Next-Generation LLM Gateway and AI Asset Management System&lt;/strong&gt;&lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/README.zh_CN.md&quot;&gt;简体中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/README.zh_TW.md&quot;&gt;繁體中文&lt;/a&gt; | &lt;strong&gt;English&lt;/strong&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/README.fr.md&quot;&gt;Français&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/README.ja.md&quot;&gt;日本語&lt;/a&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Calcium-Ion/new-api/main/LICENSE&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/license/Calcium-Ion/new-api?color=brightgreen&quot; alt=&quot;license&quot; /&gt; &lt;/a&gt;
  &lt;!--
  --&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api/releases/latest&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/v/release/Calcium-Ion/new-api?color=brightgreen&amp;amp;include_prereleases&quot; alt=&quot;release&quot; /&gt; &lt;/a&gt;
  &lt;!--
  --&gt;&lt;a href=&quot;https://hub.docker.com/r/CalciumIon/new-api&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/docker-dockerHub-blue&quot; alt=&quot;docker&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://atomgit.com/QuantumNous/new-api&quot; target=&quot;_blank&quot;&gt; &lt;img alt=&quot;AtomGit G-Star&quot; src=&quot;https://atomgit.com/QuantumNous/new-api/star/badge.svg?sanitize=true&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://trendshift.io/repositories/20180&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://trendshift.io/api/badge/repositories/20180&quot; alt=&quot;QuantumNous%2Fnew-api | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt; &lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://hellogithub.com/repository/QuantumNous/new-api&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://api.hellogithub.com/v1/widgets/recommend.svg?rid=539ac4217e69431684ad4a0bab768811&amp;amp;claim_uid=tbFPfKIDHpc4TzR&quot; alt=&quot;Featured｜HelloGitHub&quot; style=&quot;width: 250px; height: 54px;&quot; width=&quot;250&quot; height=&quot;54&quot; /&gt; &lt;/a&gt;
  &lt;!--
  --&gt; &lt;a href=&quot;https://atomgit.com/QuantumNous/new-api&quot; target=&quot;_blank&quot;&gt; &lt;img alt=&quot;AtomGit G-Star&quot; src=&quot;https://atomgit.com/QuantumNous/new-api/star/new_badge.svg?sanitize=true&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-quick-start&quot;&gt;Quick Start&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-key-features&quot;&gt;Key Features&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-deployment&quot;&gt;Deployment&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-documentation&quot;&gt;Documentation&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/#-help-support&quot;&gt;Help&lt;/a&gt; &lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;📝 Project Description&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;This project is intended solely for lawful and authorized AI API gateway, organization-level authentication, multi-model management, usage analytics, cost accounting, and private deployment scenarios.&lt;/li&gt; 
  &lt;li&gt;Users must lawfully obtain upstream API keys, accounts, model services, and interface permissions, and must comply with upstream terms of service and applicable laws and regulations.&lt;/li&gt; 
  &lt;li&gt;Users should ensure their use complies with upstream terms of service and applicable laws and regulations.&lt;/li&gt; 
  &lt;li&gt;When providing generative AI services to the public, users should comply with applicable regulatory requirements and fulfill all filing, licensing, content safety, real-name verification, log retention, tax, and upstream authorization obligations required by their jurisdiction.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤝 Trusted Partners&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;em&gt;No particular order&lt;/em&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.cherry-ai.com/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/cherry-studio.png&quot; alt=&quot;Cherry Studio&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://github.com/iOfficeAI/AionUi/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/aionui.png&quot; alt=&quot;Aion UI&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://bda.pku.edu.cn/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/pku.png&quot; alt=&quot;Peking University&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://www.compshare.cn/?ytag=GPU_yy_gh_newapi&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/ucloud.png&quot; alt=&quot;UCloud&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://www.aliyun.com/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/aliyun.png&quot; alt=&quot;Alibaba Cloud&quot; height=&quot;80&quot; /&gt; &lt;/a&gt;
 &lt;!--
  --&gt;&lt;a href=&quot;https://io.net/&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/images/io-net.png&quot; alt=&quot;IO.NET&quot; height=&quot;80&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🙏 Special Thanks&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.jetbrains.com/?from=new-api&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png&quot; alt=&quot;JetBrains Logo&quot; width=&quot;120&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;Thanks to &lt;a href=&quot;https://www.jetbrains.com/?from=new-api&quot;&gt;JetBrains&lt;/a&gt; for providing free open-source development license for this project&lt;/strong&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚀 Quick Start&lt;/h2&gt; 
&lt;h3&gt;Using Docker Compose (Recommended)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone the project
git clone https://github.com/QuantumNous/new-api.git
cd new-api

# Edit docker-compose.yml configuration
nano docker-compose.yml

# Start the service
docker-compose up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Using Docker Commands&lt;/strong&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Pull the latest image
docker pull calciumion/new-api:latest

# Using SQLite (default)
docker run --name new-api -d --restart always \
  -p 3000:3000 \
  -e TZ=Asia/Shanghai \
  -v ./data:/data \
  calciumion/new-api:latest

# Using MySQL
docker run --name new-api -d --restart always \
  -p 3000:3000 \
  -e SQL_DSN=&quot;root:123456@tcp(localhost:3306)/oneapi&quot; \
  -e TZ=Asia/Shanghai \
  -v ./data:/data \
  calciumion/new-api:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;💡 Tip:&lt;/strong&gt; &lt;code&gt;-v ./data:/data&lt;/code&gt; will save data in the &lt;code&gt;data&lt;/code&gt; folder of the current directory, you can also change it to an absolute path like &lt;code&gt;-v /your/custom/path:/data&lt;/code&gt;&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;p&gt;🎉 After deployment is complete, visit &lt;code&gt;http://localhost:3000&lt;/code&gt; to start using!&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;When operating this project as a public generative AI service or API resale service, users should first complete all required filing, licensing, content safety, real-name verification, log retention, tax, payment, and upstream authorization obligations.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;📖 For more deployment methods, please refer to &lt;a href=&quot;https://docs.newapi.pro/en/docs/installation&quot;&gt;Deployment Guide&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📚 Documentation&lt;/h2&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;h3&gt;📖 &lt;a href=&quot;https://docs.newapi.pro/en/docs&quot;&gt;Official Documentation&lt;/a&gt; | &lt;a href=&quot;https://deepwiki.com/QuantumNous/new-api&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt;&lt;/h3&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;strong&gt;Quick Navigation:&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Category&lt;/th&gt; 
   &lt;th&gt;Link&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🚀 Deployment Guide&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/installation&quot;&gt;Installation Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;⚙️ Environment Configuration&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/installation/config-maintenance/environment-variables&quot;&gt;Environment Variables&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📡 API Documentation&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api&quot;&gt;API Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;❓ FAQ&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/faq&quot;&gt;FAQ&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;💬 Community Interaction&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/community-interaction&quot;&gt;Communication Channels&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;✨ Key Features&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;For detailed features, please refer to &lt;a href=&quot;https://docs.newapi.pro/en/docs/guide/wiki/basic-concepts/features-introduction&quot;&gt;Features Introduction&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;🎨 Core Functions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎨 New UI&lt;/td&gt; 
   &lt;td&gt;Modern user interface design&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🌍 Multi-language&lt;/td&gt; 
   &lt;td&gt;Supports Simplified Chinese, Traditional Chinese, English, French, Japanese&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔄 Data Compatibility&lt;/td&gt; 
   &lt;td&gt;Fully compatible with the original One API database&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📈 Data Dashboard&lt;/td&gt; 
   &lt;td&gt;Visual console and statistical analysis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔒 Permission Management&lt;/td&gt; 
   &lt;td&gt;Token grouping, model restrictions, user management&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;💰 Authorized Usage Accounting and Billing&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;✅ Internal top-up and quota allocation for lawful authorized scenarios (EPay, Stripe)&lt;/li&gt; 
 &lt;li&gt;✅ Organization-level per-request, usage-based, and cache-hit cost accounting&lt;/li&gt; 
 &lt;li&gt;✅ Cache billing statistics for OpenAI, Azure, DeepSeek, Claude, Qwen, and supported models&lt;/li&gt; 
 &lt;li&gt;✅ Flexible billing policies for internal management or authorized enterprise customers&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🔐 Authorization and Security&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;😈 Discord authorization login&lt;/li&gt; 
 &lt;li&gt;🤖 LinuxDO authorization login&lt;/li&gt; 
 &lt;li&gt;📱 Telegram authorization login&lt;/li&gt; 
 &lt;li&gt;🔑 OIDC unified authentication&lt;/li&gt; 
 &lt;li&gt;🔍 Key quota query usage (with &lt;a href=&quot;https://github.com/Calcium-Ion/new-api-key-tool&quot;&gt;new-api-key-tool&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🚀 Advanced Features&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;API Format Support:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;⚡ &lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/create-response&quot;&gt;OpenAI Responses&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;⚡ &lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/realtime/create-realtime-session&quot;&gt;OpenAI Realtime API&lt;/a&gt; (including Azure)&lt;/li&gt; 
 &lt;li&gt;⚡ &lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/create-message&quot;&gt;Claude Messages&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;⚡ &lt;a href=&quot;https://doc.newapi.pro/en/api/google-gemini-chat&quot;&gt;Google Gemini&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🔄 &lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/rerank/create-rerank&quot;&gt;Rerank Models&lt;/a&gt; (Cohere, Jina)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Intelligent Routing:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;⚖️ Channel weighted random&lt;/li&gt; 
 &lt;li&gt;🔄 Automatic retry on failure&lt;/li&gt; 
 &lt;li&gt;🚦 User-level model rate limiting&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Format Conversion:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;🔄 &lt;strong&gt;OpenAI Compatible ⇄ Claude Messages&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;🔄 &lt;strong&gt;OpenAI Compatible → Google Gemini&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;🔄 &lt;strong&gt;Google Gemini → OpenAI Compatible&lt;/strong&gt; - Text only, function calling not supported yet&lt;/li&gt; 
 &lt;li&gt;🚧 &lt;strong&gt;OpenAI Compatible ⇄ OpenAI Responses&lt;/strong&gt; - In development&lt;/li&gt; 
 &lt;li&gt;🔄 &lt;strong&gt;Thinking-to-content functionality&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Reasoning Effort Support:&lt;/strong&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;View detailed configuration&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;OpenAI series models:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;o3-mini-high&lt;/code&gt; - High reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;o3-mini-medium&lt;/code&gt; - Medium reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;o3-mini-low&lt;/code&gt; - Low reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gpt-5-high&lt;/code&gt; - High reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gpt-5-medium&lt;/code&gt; - Medium reasoning effort&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gpt-5-low&lt;/code&gt; - Low reasoning effort&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Claude thinking models:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;claude-3-7-sonnet-20250219-thinking&lt;/code&gt; - Enable thinking mode&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Google Gemini series models:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-flash-thinking&lt;/code&gt; - Enable thinking mode&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-flash-nothinking&lt;/code&gt; - Disable thinking mode&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-pro-thinking&lt;/code&gt; - Enable thinking mode&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gemini-2.5-pro-thinking-128&lt;/code&gt; - Enable thinking mode with thinking budget of 128 tokens&lt;/li&gt; 
  &lt;li&gt;You can also append &lt;code&gt;-low&lt;/code&gt;, &lt;code&gt;-medium&lt;/code&gt;, or &lt;code&gt;-high&lt;/code&gt; to any Gemini model name to request the corresponding reasoning effort (no extra thinking-budget suffix needed).&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤖 Model Support&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;For details, please refer to &lt;a href=&quot;https://docs.newapi.pro/en/docs/api&quot;&gt;API Documentation - Gateway Interface&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model Type&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Documentation&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🤖 OpenAI-Compatible&lt;/td&gt; 
   &lt;td&gt;OpenAI compatible models&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createchatcompletion&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🤖 OpenAI Responses&lt;/td&gt; 
   &lt;td&gt;OpenAI Responses format&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎨 Midjourney-Proxy&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/novicezk/midjourney-proxy&quot;&gt;Midjourney-Proxy(Plus)&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://doc.newapi.pro/api/midjourney-proxy-image&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎵 Suno-API&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Suno-API/Suno-API&quot;&gt;Suno API&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://doc.newapi.pro/api/suno-music&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔄 Rerank&lt;/td&gt; 
   &lt;td&gt;Cohere, Jina&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;💬 Claude&lt;/td&gt; 
   &lt;td&gt;Messages format&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/createmessage&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🌐 Gemini&lt;/td&gt; 
   &lt;td&gt;Google Gemini format&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/gemini/geminirelayv1beta&quot;&gt;Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔧 Dify&lt;/td&gt; 
   &lt;td&gt;ChatFlow mode&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎯 Custom upstream&lt;/td&gt; 
   &lt;td&gt;Supports configuring legally authorized upstream endpoints&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;📡 Supported Interfaces&lt;/h3&gt; 
&lt;details&gt; 
 &lt;summary&gt;View complete interface list&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createchatcompletion&quot;&gt;Chat Interface (Chat Completions)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/openai/createresponse&quot;&gt;Response Interface (Responses)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/images/openai/post-v1-images-generations&quot;&gt;Image Interface (Image)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/audio/openai/create-transcription&quot;&gt;Audio Interface (Audio)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/videos/sora/createvideo&quot;&gt;Video Interface (Video)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/embeddings/createembedding&quot;&gt;Embedding Interface (Embeddings)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/rerank/creatererank&quot;&gt;Rerank Interface (Rerank)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/realtime/createrealtimesession&quot;&gt;Realtime Conversation (Realtime)&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/createmessage&quot;&gt;Claude Chat&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/api/ai-model/chat/gemini/geminirelayv1beta&quot;&gt;Google Gemini Chat&lt;/a&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚢 Deployment&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Latest Docker image:&lt;/strong&gt; &lt;code&gt;calciumion/new-api:latest&lt;/code&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;📋 Deployment Requirements&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Component&lt;/th&gt; 
   &lt;th&gt;Requirement&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Local database&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;SQLite (Docker must mount &lt;code&gt;/data&lt;/code&gt; directory)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Remote database&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;MySQL ≥ 5.7.8 or PostgreSQL ≥ 9.6&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Container engine&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Docker / Docker Compose&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;System architecture&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;64-bit only (amd64 / arm64); 32-bit systems are not supported&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;⚙️ Environment Variable Configuration&lt;/h3&gt; 
&lt;details&gt; 
 &lt;summary&gt;Common environment variable configuration&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Variable Name&lt;/th&gt; 
    &lt;th&gt;Description&lt;/th&gt; 
    &lt;th&gt;Default Value&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;SESSION_SECRET&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Authentication signing secret; must be identical on every node&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;SESSION_COOKIE_SECURE&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;/unset disables the refresh/logout OriginGuard for local HTTP dev proxies; &lt;code&gt;true&lt;/code&gt; enables the Secure cookie and strict Origin checks&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;SESSION_COOKIE_TRUSTED_URL&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Required with Secure mode: comma-separated exact HTTPS Origins allowed to call refresh/logout; not a relay CORS allowlist&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;TRUSTED_PROXIES&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Unset/blank trusts loopback, RFC 1918 and IPv6 ULA with a startup warning; &lt;code&gt;none&lt;/code&gt; trusts no proxies; an explicit proxy IP/CIDR list replaces the defaults&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;127.0.0.0/8, ::1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;USER_SESSION_ACTIVE_LIMIT&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum active login Sessions per user&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;50&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;USER_SESSION_ISSUANCE_LIMIT&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Maximum Sessions created per user within the issuance window, including revoked Sessions&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;USER_SESSION_ISSUANCE_WINDOW_SECONDS&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Per-user Session issuance window; clamped to the revoked retention period when configured higher&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;86400&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;USER_SESSION_REVOKED_RETENTION_DAYS&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Days to retain revoked Session rows for audit and issuance accounting&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;USER_SESSION_HOURLY_ALERT_THRESHOLD&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Global Sessions created per hour that triggers an alert only; it never blocks login&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;5000&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;CRYPTO_SECRET&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;HMAC secret for cache keys; nodes sharing Redis must use the same effective value&lt;/td&gt; 
    &lt;td&gt;Defaults to &lt;code&gt;SESSION_SECRET&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;SQL_DSN&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Database connection string&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;REDIS_CONN_STRING&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Redis connection string&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;RELAY_IDLE_CONN_TIMEOUT&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Idle keep-alive timeout for relay HTTP clients, seconds. Defaults to Go standard library behavior; set &lt;code&gt;0&lt;/code&gt; to disable&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;90&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;RELAY_RESPONSE_HEADER_TIMEOUT&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;How long the relay waits for upstream &lt;strong&gt;response headers&lt;/strong&gt;, seconds; set &lt;code&gt;0&lt;/code&gt; to disable. Only bounds the header wait -- streaming after the headers arrive is unaffected. Note that non-streaming upstreams usually send headers only once generation finishes, so leave headroom&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;1800&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;STREAMING_TIMEOUT&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Streaming timeout (seconds)&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;300&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;STREAM_SCANNER_MAX_BUFFER_MB&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Max per-line buffer (MB) for the stream scanner; increase when upstream sends huge image/base64 payloads&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;64&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;MAX_REQUEST_BODY_MB&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Max request body size (MB, counted &lt;strong&gt;after decompression&lt;/strong&gt;; prevents huge requests/zip bombs from exhausting memory). Exceeding it returns &lt;code&gt;413&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;32&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;AZURE_DEFAULT_API_VERSION&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Azure API version&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;2025-04-01-preview&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;ERROR_LOG_ENABLED&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Error log switch&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_URL&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope server address&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_APP_NAME&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope application name&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;new-api&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_BASIC_AUTH_USER&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope basic auth user&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_BASIC_AUTH_PASSWORD&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope basic auth password&lt;/td&gt; 
    &lt;td&gt;-&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_MUTEX_RATE&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope mutex sampling rate&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PYROSCOPE_BLOCK_RATE&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pyroscope block sampling rate&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;HOSTNAME&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Hostname tag for Pyroscope&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;new-api&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;📖 &lt;strong&gt;Complete configuration:&lt;/strong&gt; &lt;a href=&quot;https://docs.newapi.pro/en/docs/installation/config-maintenance/environment-variables&quot;&gt;Environment Variables Documentation&lt;/a&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;h3&gt;🔧 Deployment Methods&lt;/h3&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Method 1: Docker Compose (Recommended)&lt;/strong&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone the project
git clone https://github.com/QuantumNous/new-api.git
cd new-api

# Edit configuration
nano docker-compose.yml

# Start service
docker-compose up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Method 2: Docker Commands&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;Using SQLite:&lt;/strong&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --name new-api -d --restart always \
  -p 3000:3000 \
  -e TZ=Asia/Shanghai \
  -v ./data:/data \
  calciumion/new-api:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Using MySQL:&lt;/strong&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --name new-api -d --restart always \
  -p 3000:3000 \
  -e SQL_DSN=&quot;root:123456@tcp(localhost:3306)/oneapi&quot; \
  -e TZ=Asia/Shanghai \
  -v ./data:/data \
  calciumion/new-api:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;💡 Path explanation:&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;./data:/data&lt;/code&gt; - Relative path, data saved in the data folder of the current directory&lt;/li&gt; 
   &lt;li&gt;You can also use absolute path, e.g.: &lt;code&gt;/your/custom/path:/data&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Method 3: BaoTa Panel&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Install BaoTa Panel (≥ 9.2.0 version)&lt;/li&gt; 
  &lt;li&gt;Search for &lt;strong&gt;New-API&lt;/strong&gt; in the application store&lt;/li&gt; 
  &lt;li&gt;One-click installation&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;📖 &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/BT.md&quot;&gt;Tutorial with images&lt;/a&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;h3&gt;⚠️ Multi-machine Deployment Considerations&lt;/h3&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;All nodes must use the same primary database and the same &lt;code&gt;SESSION_SECRET&lt;/code&gt;; otherwise Access Tokens, refresh sessions, and temporary authentication flows cannot be verified consistently.&lt;/li&gt; 
  &lt;li&gt;Nodes connected to the same Redis must also use the same &lt;code&gt;CRYPTO_SECRET&lt;/code&gt;, or their cache-key digests will differ and shared entries cannot be reused consistently.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/div&gt; 
&lt;p&gt;The database is authoritative for login Sessions and for the per-user active/issuance limits. Redis Session entries are short-lived caches whose TTL follows &lt;code&gt;SYNC_FREQUENCY&lt;/code&gt; (60 seconds by default) and never exceeds the Session&#39;s remaining lifetime.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Redis topology&lt;/th&gt; 
   &lt;th&gt;Session propagation&lt;/th&gt; 
   &lt;th&gt;Rate limiting&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Shared Redis&lt;/td&gt; 
   &lt;td&gt;Revocations and version publications normally propagate immediately&lt;/td&gt; 
   &lt;td&gt;Redis limits are shared across nodes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Independent Redis per node&lt;/td&gt; 
   &lt;td&gt;Nodes converge from the database within the effective &lt;code&gt;SYNC_FREQUENCY&lt;/code&gt;; a newly rotated token may receive a temporary 401 on a node with stale cache&lt;/td&gt; 
   &lt;td&gt;Each node has its own allowance, so aggregate capacity can reach roughly the configured limit multiplied by the node count&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;No Redis&lt;/td&gt; 
   &lt;td&gt;Every Session validation reads the database&lt;/td&gt; 
   &lt;td&gt;In-memory limits are independent per node&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;A shorter &lt;code&gt;SYNC_FREQUENCY&lt;/code&gt; reduces the independent-Redis staleness window but causes one additional primary-key Session lookup per active SID, per node, per TTL. These guarantees make Session authentication bounded-stale across the supported topologies; rate limits and other Redis-backed control-plane caches remain topology-dependent.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/docs/authentication.md&quot;&gt;User authentication and login sessions&lt;/a&gt; for the token, Origin-check and PAT contracts.&lt;/p&gt; 
&lt;h3&gt;🔄 Channel Retry and Cache&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Retry configuration:&lt;/strong&gt; &lt;code&gt;Settings → Operation Settings → General Settings → Failure Retry Count&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Cache configuration:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;REDIS_CONN_STRING&lt;/code&gt;: Redis cache (recommended)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;MEMORY_CACHE_ENABLED&lt;/code&gt;: Memory cache&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🔗 Related Projects&lt;/h2&gt; 
&lt;h3&gt;Upstream Projects&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Project&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/songquanpeng/one-api&quot;&gt;One API&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Original project base&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/novicezk/midjourney-proxy&quot;&gt;Midjourney-Proxy&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Midjourney interface support&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Supporting Tools&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Project&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api-key-tool&quot;&gt;new-api-key-tool&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Key quota query tool&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api-horizon&quot;&gt;new-api-horizon&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;New API high-performance optimized version&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;💬 Help Support&lt;/h2&gt; 
&lt;h3&gt;📖 Documentation Resources&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Resource&lt;/th&gt; 
   &lt;th&gt;Link&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📘 FAQ&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/faq&quot;&gt;FAQ&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;💬 Community Interaction&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/community-interaction&quot;&gt;Communication Channels&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🐛 Issue Feedback&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs/support/feedback-issues&quot;&gt;Issue Feedback&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📚 Complete Documentation&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs&quot;&gt;Official Documentation&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;🤝 Contribution Guide&lt;/h3&gt; 
&lt;p&gt;Welcome all forms of contribution!&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;🐛 Report Bugs&lt;/li&gt; 
 &lt;li&gt;💡 Propose New Features&lt;/li&gt; 
 &lt;li&gt;📝 Improve Documentation&lt;/li&gt; 
 &lt;li&gt;🔧 Submit Code&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📜 License&lt;/h2&gt; 
&lt;p&gt;This project is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/QuantumNous/new-api/main/LICENSE&quot;&gt;GNU Affero General Public License v3.0 (AGPLv3)&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Additional terms under AGPLv3 Section 7 apply. Modified versions must preserve the author attribution notice &lt;code&gt;Frontend design and development by New API contributors.&lt;/code&gt; in the appropriate legal notices and in any prominent about, legal, footer, or attribution location presented by the user interface.&lt;/p&gt; 
&lt;p&gt;Modified versions that present a user interface must also preserve a visible link to the original project: &lt;a href=&quot;https://github.com/QuantumNous/new-api&quot;&gt;https://github.com/QuantumNous/new-api&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;This is an open-source project developed based on &lt;a href=&quot;https://github.com/songquanpeng/one-api&quot;&gt;One API&lt;/a&gt; (MIT License).&lt;/p&gt; 
&lt;p&gt;If your organization&#39;s policies do not permit the use of AGPLv3-licensed software, or if you wish to avoid the open-source obligations of AGPLv3, please contact us at: &lt;a href=&quot;mailto:support@quantumnous.com&quot;&gt;support@quantumnous.com&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🌟 Star History&lt;/h2&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://star-history.com/#Calcium-Ion/new-api&amp;amp;Date&quot;&gt;&lt;img src=&quot;https://api.star-history.com/svg?repos=Calcium-Ion/new-api&amp;amp;type=Date&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;h3&gt;💖 Thank you for using New API&lt;/h3&gt; 
 &lt;p&gt;If this project is helpful to you, welcome to give us a ⭐️ Star！&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.newapi.pro/en/docs&quot;&gt;Official Documentation&lt;/a&gt;&lt;/strong&gt; • &lt;strong&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api/issues&quot;&gt;Issue Feedback&lt;/a&gt;&lt;/strong&gt; • &lt;strong&gt;&lt;a href=&quot;https://github.com/Calcium-Ion/new-api/releases&quot;&gt;Latest Release&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;sub&gt;Built with ❤️ by QuantumNous&lt;/sub&gt;&lt;/p&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/9b85e383788835db88b63e190853543bdfb7c7100ae68c5d4685eac028a2fbe3/QuantumNous/new-api" medium="image" />
      
    </item>
    
    <item>
      <title>DataDog/datadog-agent</title>
      <link>https://github.com/DataDog/datadog-agent</link>
      <description>&lt;p&gt;Main repository for Datadog Agent&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://docs.datadoghq.com/&quot;&gt;https://docs.datadoghq.com/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Datadog Agent&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/DataDog/datadog-agent?style=flat&amp;amp;logo=datadog&amp;amp;logoColor=%23632CA6&amp;amp;labelColor=%23FFF&amp;amp;color=%23632CA6&quot; alt=&quot;GitHub Release&quot; /&gt; &lt;a href=&quot;https://godoc.org/github.com/DataDog/datadog-agent&quot;&gt;&lt;img src=&quot;https://godoc.org/github.com/DataDog/datadog-agent?status.svg?sanitize=true&quot; alt=&quot;GoDoc&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;This repository contains the source code of the Datadog Agent version 7 and version 6. Please refer to the &lt;a href=&quot;https://docs.datadoghq.com/agent/&quot;&gt;Agent user documentation&lt;/a&gt; for information about differences between Agent v5, Agent v6 and Agent v7. Additionally, we provide a list of prepackaged binaries for an easy install process &lt;a href=&quot;https://app.datadoghq.com/fleet/install-agent/latest?platform=overview&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;The &lt;a href=&quot;https://datadoghq.dev/datadog-agent/setup/required/&quot;&gt;developer docs site&lt;/a&gt; contains information about how to develop the Datadog Agent itself.&lt;/p&gt; 
&lt;p&gt;The source of the content is located under &lt;a href=&quot;https://raw.githubusercontent.com/DataDog/datadog-agent/main/docs&quot;&gt;the docs directory&lt;/a&gt; and may contain pages that are not yet published.&lt;/p&gt; 
&lt;h2&gt;Contributing code&lt;/h2&gt; 
&lt;p&gt;You&#39;ll find information and help on how to contribute code to this project under &lt;a href=&quot;https://raw.githubusercontent.com/DataDog/datadog-agent/main/docs/dev&quot;&gt;the &lt;code&gt;docs/dev&lt;/code&gt; directory&lt;/a&gt; of the present repo.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The Datadog Agent user space components are licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/DataDog/datadog-agent/main/LICENSE&quot;&gt;Apache License, Version 2.0&lt;/a&gt;. The BPF code is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/DataDog/datadog-agent/main/pkg/ebpf/c/COPYING&quot;&gt;General Public License, Version 2.0&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/d07e3836653651cc2a6e37a5f29a2de381777e5e9eff1bbb579e25f46120ecf4/DataDog/datadog-agent" medium="image" />
      
    </item>
    
    <item>
      <title>projectdiscovery/katana</title>
      <link>https://github.com/projectdiscovery/katana</link>
      <description>&lt;p&gt;A next-generation crawling and spidering framework.&lt;/p&gt;&lt;hr&gt;&lt;h1 align=&quot;center&quot;&gt; &lt;img src=&quot;https://user-images.githubusercontent.com/8293321/196779266-421c79d4-643a-4f73-9b54-3da379bbac09.png&quot; alt=&quot;katana&quot; width=&quot;200px&quot; /&gt; &lt;br /&gt; &lt;/h1&gt; 
&lt;h4 align=&quot;center&quot;&gt;A next-generation crawling and spidering framework&lt;/h4&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://goreportcard.com/report/github.com/projectdiscovery/katana&quot;&gt;&lt;img src=&quot;https://goreportcard.com/badge/github.com/projectdiscovery/katana&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/projectdiscovery/katana/issues&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/projectdiscovery/katana/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/release/projectdiscovery/katana&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://twitter.com/pdiscoveryio&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/pdiscoveryio.svg?logo=twitter&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/projectdiscovery&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/695645237418131507.svg?logo=discord&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/#features&quot;&gt;Features&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/#installation&quot;&gt;Installation&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/#usage&quot;&gt;Usage&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/#scope-control&quot;&gt;Scope&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/#crawler-configuration&quot;&gt;Config&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/#filters&quot;&gt;Filters&lt;/a&gt; • &lt;a href=&quot;https://discord.gg/projectdiscovery&quot;&gt;Join Discord&lt;/a&gt; &lt;/p&gt; 
&lt;h1&gt;Features&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/8293321/199371558-daba03b6-bf9c-4883-8506-76497c6c3a44.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Fast And fully configurable web crawling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Standard&lt;/strong&gt; and &lt;strong&gt;Headless&lt;/strong&gt; mode&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; parsing / crawling&lt;/li&gt; 
 &lt;li&gt;Customizable &lt;strong&gt;automatic form filling&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Scope control&lt;/strong&gt; - Preconfigured field / Regex&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Knowledge base&lt;/strong&gt; - ML page-type / form classification (auto-downloaded model)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Customizable output&lt;/strong&gt; - Preconfigured fields&lt;/li&gt; 
 &lt;li&gt;INPUT - &lt;strong&gt;STDIN&lt;/strong&gt;, &lt;strong&gt;URL&lt;/strong&gt; and &lt;strong&gt;LIST&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;OUTPUT - &lt;strong&gt;STDOUT&lt;/strong&gt;, &lt;strong&gt;FILE&lt;/strong&gt; and &lt;strong&gt;JSON&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;katana requires Go 1.26+ to install successfully. If you encounter any installation issues, we recommend trying with the latest available version of Go, as the minimum required version may have changed. Run the command below or download a pre-compiled binary from the &lt;a href=&quot;https://github.com/projectdiscovery/katana/releases&quot;&gt;release page&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;More options to install / run katana-&lt;/strong&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Docker&lt;/summary&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;To install / update docker to latest tag -&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker pull projectdiscovery/katana:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;To run katana in standard mode using docker -&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker run projectdiscovery/katana:latest -u https://tesla.com
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;To run katana in headless mode using docker -&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Ubuntu&lt;/summary&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;It&#39;s recommended to install the following prerequisites -&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sudo apt update
sudo apt install zip curl wget git snapd
sudo snap refresh
sudo snap install golang --classic

sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub \
  | sudo gpg --dearmor -o /etc/apt/keyrings/google-chrome.gpg

echo &quot;deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] \
  http://dl.google.com/linux/chrome/deb/ stable main&quot; \
  | sudo tee /etc/apt/sources.list.d/google-chrome.list &amp;gt; /dev/null

sudo apt update
sudo apt install google-chrome-stable
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;install katana -&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;go install github.com/projectdiscovery/katana/cmd/katana@latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -h
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will display help for the tool. Here are all the switches it supports.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;Katana is a fast crawler focused on execution in automation
pipelines offering both headless and non-headless crawling.

Usage:
  ./katana [flags]

Flags:
INPUT:
   -u, -list string[]     target url / list to crawl
   -resume string         resume scan using resume.cfg
   -e, -exclude string[]  exclude host matching specified filter (&#39;cdn&#39;, &#39;private-ips&#39;, cidr, ip, regex)

CONFIGURATION:
   -r, -resolvers string[]       list of custom resolver (file or comma separated)
   -d, -depth int                maximum depth to crawl (default 3)
   -jc, -js-crawl                enable endpoint parsing / crawling in javascript file
   -jsl, -jsluice                enable jsluice parsing in javascript file (memory intensive)
   -ct, -crawl-duration value    maximum duration to crawl the target for (s, m, h, d) (default s)
   -kf, -known-files string      enable crawling of known files (all,robotstxt,sitemapxml), a minimum depth of 3 is required to ensure all known files are properly crawled.
   -mrs, -max-response-size int  maximum response size to read (default 4194304)
   -timeout int                  time to wait for request in seconds (default 10)
   -aff, -automatic-form-fill    enable automatic form filling (experimental)
   -fx, -form-extraction         extract form, input, textarea &amp;amp; select elements in jsonl output
   -retry int                    number of times to retry the request (default 1)
   -proxy string                 http/socks5 proxy to use
   -td, -tech-detect             enable technology detection
   -H, -headers string[]         custom header/cookie to include in all http request in header:value format (file)
   -config string                path to the katana configuration file
   -fc, -form-config string      path to custom form configuration file
   -flc, -field-config string    path to custom field configuration file
   -s, -strategy string          Visit strategy (depth-first, breadth-first) (default &quot;depth-first&quot;)
   -iqp, -ignore-query-params    Ignore crawling same path with different query-param values
   -fsu, -filter-similar         filter crawling of similar looking URLs (e.g., /users/123 and /users/456)
   -fst, -filter-similar-threshold int  number of distinct values before a path position is treated as parameter (default 10)
   -tlsi, -tls-impersonate       enable experimental client hello (ja3) tls randomization
   -dr, -disable-redirects       disable following redirects (default false)
   -pcs, -page-content-similar   enable page content similarity filtering (simhash|tfidf|bm25)
   -pcsm, -page-content-similar-mode string  similarity mode: simhash, tfidf, or bm25 (default simhash)
   -pcsd, -page-content-similar-distance int  simhash max hamming distance (default 3)
   -pcst, -page-content-similar-threshold float  tfidf/bm25 min score 0-1 (default 0.85)
   -pcsn, -page-content-similar-budget int  pages to fully process per similarity cluster (default 1)
   -sdd, -similarity-deduplication  alias for -pcs
   -kb, -knowledge-base          enable knowledge base classification
   -kb-secrets                   enable secrets extractor in the knowledge base
   -kb-validate-secrets          validate detected secrets against their provider (sends live API calls)
   -kb-endpoints                 enable endpoints extractor (classifies REST/GraphQL/SOAP/XHR requests)
   -mdp, -max-domain-pages int   maximum number of pages to crawl per domain (default unlimited)

DEBUG:
   -health-check, -hc        run diagnostic check up
   -elog, -error-log string  file to write sent requests error log
   -pprof-server             enable pprof server

HEADLESS:
   -hl, -headless                    enable headless hybrid crawling (experimental)
   -sc, -system-chrome               use local installed chrome browser instead of katana installed
   -sb, -show-browser                show the browser on the screen with headless mode
   -ho, -headless-options string[]   start headless chrome with additional options
   -nos, -no-sandbox                 start headless chrome in --no-sandbox mode
   -cdd, -chrome-data-dir string     path to store chrome browser data
   -scp, -system-chrome-path string  use specified chrome browser for headless crawling
   -noi, -no-incognito               start headless chrome without incognito mode
   -cwu, -chrome-ws-url string       use chrome browser instance launched elsewhere with the debugger listening at this URL
   -xhr, -xhr-extraction             extract xhr request url,method in jsonl output
   -pls, -page-load-strategy string  page load strategy (heuristic, load, domcontentloaded, networkidle, none) (default &quot;heuristic&quot;)
   -dwt, -dom-wait-time int          time in seconds to wait after page load when using domcontentloaded strategy (default 5)
   -csp, -captcha-solver-provider string  captcha solver provider (e.g. capsolver)
   -csk, -captcha-solver-key string       captcha solver provider api key

SCOPE:
   -cs, -crawl-scope string[]       in scope url regex to be followed by crawler
   -cos, -crawl-out-scope string[]  out of scope url regex to be excluded by crawler
   -fs, -field-scope string         pre-defined scope field (dn,rdn,fqdn) or custom regex (e.g., &#39;(company-staging.io|company.com)&#39;) (default &quot;rdn&quot;)
   -ns, -no-scope                   disables host based default scope
   -do, -display-out-scope          display external endpoint from scoped crawling

FILTER:
   -mr, -match-regex string[]             regex or list of regex to match on output url (cli, file)
   -fr, -filter-regex string[]            regex or list of regex to filter on output url (cli, file)
   -f, -field string                      field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir) (Deprecated: use -output-template instead)
   -sf, -store-field string               field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
   -em, -extension-match string[]         match output for given extension (eg, -em php,html,js,none)
   -ef, -extension-filter string[]        filter output for given extension (eg, -ef png,css)
   -ndef, -no-default-ext-filter bool     remove default extensions from the filter list
   -mdc, -match-condition string          match response with dsl based condition
   -fdc, -filter-condition string         filter response with dsl based condition
   -duf, -disable-unique-filter           disable duplicate content filtering
   -filter-page-type string[]      filter response with page type (e.g. error,captcha,parked)

RATE-LIMIT:
   -c, -concurrency int          number of concurrent fetchers to use (default 10)
   -p, -parallelism int          number of concurrent inputs to process (default 10)
   -rd, -delay int               request delay between each request in seconds
   -rl, -rate-limit int          maximum requests to send per second (default 150)
   -rlm, -rate-limit-minute int  maximum number of requests to send per minute
   -hrl, -host-rate-limit int    maximum requests to send per second per host
   -hrlm, -host-rate-limit-minute int  maximum number of requests to send per minute per host

UPDATE:
   -up, -update                 update katana to latest version
   -duc, -disable-update-check  disable automatic katana update check

OUTPUT:
   -o, -output string                file to write output to
   -output-template string      custom output template
   -sr, -store-response              store http requests/responses
   -srd, -store-response-dir string  store http requests/responses to custom directory
   -ncb, -no-clobber                 do not overwrite output file
   -sfd, -store-field-dir string     store per-host field to custom directory
   -or, -omit-raw                    omit raw requests/responses from jsonl output
   -ob, -omit-body                   omit response body from jsonl output
   -lof, -list-output-fields         list available fields for jsonl output format
   -eof, -exclude-output-fields      exclude fields from jsonl output
   -j, -jsonl                        write output in jsonl format
   -nc, -no-color                    disable output content coloring (ANSI escape codes)
   -silent                           display output only
   -v, -verbose                      display verbose output
   -debug                            display debug output
   -version                          display project version
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Running Katana&lt;/h2&gt; 
&lt;h3&gt;Input for katana&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;katana&lt;/strong&gt; requires &lt;strong&gt;url&lt;/strong&gt; or &lt;strong&gt;endpoint&lt;/strong&gt; to crawl and accepts single or multiple inputs.&lt;/p&gt; 
&lt;p&gt;Input URL can be provided using &lt;code&gt;-u&lt;/code&gt; option, and multiple values can be provided using comma-separated input, similarly &lt;strong&gt;file&lt;/strong&gt; input is supported using &lt;code&gt;-list&lt;/code&gt; option and additionally piped input (stdin) is also supported.&lt;/p&gt; 
&lt;h4&gt;URL Input&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;katana -u https://tesla.com
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Multiple URL Input (comma-separated)&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;katana -u https://tesla.com,https://google.com
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;List Input&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ cat url_list.txt

https://tesla.com
https://google.com
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;katana -list url_list.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;STDIN (piped) Input&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;echo https://tesla.com | katana
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;cat domains | httpx | katana
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Page Content Similarity&lt;/h3&gt; 
&lt;p&gt;Optional Layer-2 filtering after exact MD5 content dedup. Shared HTML normalization strips chrome (&lt;code&gt;nav&lt;/code&gt;/&lt;code&gt;header&lt;/code&gt;/&lt;code&gt;footer&lt;/code&gt;/scripts), then one of three modes decides whether a page is similar enough to skip further parse/enqueue (cluster budget). URL-shape dedup (&lt;code&gt;-fsu&lt;/code&gt;) remains independent.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Mode&lt;/th&gt; 
   &lt;th&gt;Flag&lt;/th&gt; 
   &lt;th&gt;Best for&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;simhash&lt;/code&gt; (default)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;-pcsm simhash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Near-duplicate / template clones (Hamming via &lt;code&gt;-pcsd&lt;/code&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;tfidf&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;-pcsm tfidf&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Topical cosine similarity (&lt;code&gt;-pcst&lt;/code&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;bm25&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;-pcsm bm25&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Topical similarity with length normalization (&lt;code&gt;-pcst&lt;/code&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# Near-duplicate detection (default mode)
katana -u https://example.com -pcs

# TF-IDF topical filtering with higher budget
katana -u https://shop.example.com -pcs -pcsm tfidf -pcst 0.85 -pcsn 2

# BM25 mode
katana -u https://example.com -pcs -pcsm bm25

# Alias from older flag name
katana -u https://example.com -sdd -pcsm simhash
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Example completion stats:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;[INF] Content similarity (simhash): 103 processed, 30 accepted, 73 filtered - 70.9% filter rate
[INF] Crawl completed in 14s. 21 endpoints found.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Example running katana -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://youtube.com

   __        __                
  / /_____ _/ /____ ____  ___ _
 /  &#39;_/ _  / __/ _  / _ \/ _  /
/_/\_\\_,_/\__/\_,_/_//_/\_,_/ v0.0.1                     

      projectdiscovery.io

[WRN] Use with caution. You are responsible for your actions.
[WRN] Developers assume no liability and are not responsible for any misuse or damage.
https://www.youtube.com/
https://www.youtube.com/about/
https://www.youtube.com/about/press/
https://www.youtube.com/about/copyright/
https://www.youtube.com/t/contact_us/
https://www.youtube.com/creators/
https://www.youtube.com/ads/
https://www.youtube.com/t/terms
https://www.youtube.com/t/privacy
https://www.youtube.com/about/policies/
https://www.youtube.com/howyoutubeworks?utm_campaign=ytgen&amp;amp;utm_source=ythp&amp;amp;utm_medium=LeftNav&amp;amp;utm_content=txt&amp;amp;u=https%3A%2F%2Fwww.youtube.com%2Fhowyoutubeworks%3Futm_source%3Dythp%26utm_medium%3DLeftNav%26utm_campaign%3Dytgen
https://www.youtube.com/new
https://m.youtube.com/
https://www.youtube.com/s/desktop/4965577f/jsbin/desktop_polymer.vflset/desktop_polymer.js
https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-home-page-skeleton.css
https://www.youtube.com/s/desktop/4965577f/cssbin/www-onepick.css
https://www.youtube.com/s/_/ytmainappweb/_/ss/k=ytmainappweb.kevlar_base.0Zo5FUcPkCg.L.B1.O/am=gAE/d=0/rs=AGKMywG5nh5Qp-BGPbOaI1evhF5BVGRZGA
https://www.youtube.com/opensearch?locale=en_GB
https://www.youtube.com/manifest.webmanifest
https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-watch-page-skeleton.css
https://www.youtube.com/s/desktop/4965577f/jsbin/web-animations-next-lite.min.vflset/web-animations-next-lite.min.js
https://www.youtube.com/s/desktop/4965577f/jsbin/custom-elements-es5-adapter.vflset/custom-elements-es5-adapter.js
https://www.youtube.com/s/desktop/4965577f/jsbin/webcomponents-sd.vflset/webcomponents-sd.js
https://www.youtube.com/s/desktop/4965577f/jsbin/intersection-observer.min.vflset/intersection-observer.min.js
https://www.youtube.com/s/desktop/4965577f/jsbin/scheduler.vflset/scheduler.js
https://www.youtube.com/s/desktop/4965577f/jsbin/www-i18n-constants-en_GB.vflset/www-i18n-constants.js
https://www.youtube.com/s/desktop/4965577f/jsbin/www-tampering.vflset/www-tampering.js
https://www.youtube.com/s/desktop/4965577f/jsbin/spf.vflset/spf.js
https://www.youtube.com/s/desktop/4965577f/jsbin/network.vflset/network.js
https://www.youtube.com/howyoutubeworks/
https://www.youtube.com/trends/
https://www.youtube.com/jobs/
https://www.youtube.com/kids/
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Crawling Mode&lt;/h2&gt; 
&lt;h3&gt;Standard Mode&lt;/h3&gt; 
&lt;p&gt;Standard crawling modality uses the standard go http library under the hood to handle HTTP requests/responses. This modality is much faster as it doesn&#39;t have the browser overhead. Still, it analyzes HTTP responses body as is, without any javascript or DOM rendering, potentially missing post-dom-rendered endpoints or asynchronous endpoint calls that might happen in complex web applications depending, for example, on browser-specific events.&lt;/p&gt; 
&lt;h3&gt;Headless Mode&lt;/h3&gt; 
&lt;p&gt;Headless mode hooks internal headless calls to handle HTTP requests/responses directly within the browser context. This offers two advantages:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The HTTP fingerprint (TLS and user agent) fully identify the client as a legitimate browser&lt;/li&gt; 
 &lt;li&gt;Better coverage since the endpoints are discovered analyzing the standard raw response, as in the previous modality, and also the browser-rendered one with javascript enabled.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Headless crawling is optional and can be enabled using &lt;code&gt;-headless&lt;/code&gt; option.&lt;/p&gt; 
&lt;p&gt;Here are other headless CLI options -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -h headless

Flags:
HEADLESS:
   -hl, -headless                    enable headless hybrid crawling (experimental)
   -sc, -system-chrome               use local installed chrome browser instead of katana installed
   -sb, -show-browser                show the browser on the screen with headless mode
   -ho, -headless-options string[]   start headless chrome with additional options
   -nos, -no-sandbox                 start headless chrome in --no-sandbox mode
   -cdd, -chrome-data-dir string     path to store chrome browser data
   -scp, -system-chrome-path string  use specified chrome browser for headless crawling
   -noi, -no-incognito               start headless chrome without incognito mode
   -cwu, -chrome-ws-url string       use chrome browser instance launched elsewhere with the debugger listening at this URL
   -xhr, -xhr-extraction             extract xhr requests
   -pls, -page-load-strategy string  page load strategy (heuristic, load, domcontentloaded, networkidle, none) (default &quot;heuristic&quot;)
   -dwt, -dom-wait-time int          time in seconds to wait after page load when using domcontentloaded strategy (default 5)
   -csp, -captcha-solver-provider string  captcha solver provider (e.g. capsolver)
   -csk, -captcha-solver-key string       captcha solver provider api key
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-no-sandbox&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Runs headless chrome browser with &lt;strong&gt;no-sandbox&lt;/strong&gt; option, useful when running as root user.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -headless -no-sandbox
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-no-incognito&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Runs headless chrome browser without incognito mode, useful when using the local browser.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -headless -no-incognito
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To preserve cookies and other browser session data across runs, combine &lt;code&gt;-no-incognito&lt;/code&gt; with &lt;code&gt;-chrome-data-dir&lt;/code&gt; so Katana reuses your chosen Chrome profile directory instead of an isolated temporary one.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -headless -no-incognito -chrome-data-dir /tmp/katana-profile
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-headless-options&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;When crawling in headless mode, additional chrome options can be specified using &lt;code&gt;-headless-options&lt;/code&gt;, for example -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-page-load-strategy&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Controls how katana waits for pages to load in headless mode. Different strategies are useful for different types of web applications:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Strategy&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;heuristic&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;(default) Smart waiting that adapts to page behavior - waits for load event, network idle, and DOM stability&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;load&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Waits only for the browser&#39;s load event&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;domcontentloaded&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Waits for DOMContentLoaded event plus additional time (configurable via &lt;code&gt;-dwt&lt;/code&gt;) for JavaScript rendering&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;networkidle&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Waits for network activity to stop&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;No waiting - returns immediately after navigation starts&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -headless -pls domcontentloaded
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;domcontentloaded&lt;/code&gt; strategy is particularly useful for Single Page Applications (SPAs) that never fully complete loading due to continuous background requests (websockets, polling, etc.).&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-dom-wait-time&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;When using the &lt;code&gt;domcontentloaded&lt;/code&gt; page load strategy, this option specifies how many seconds to wait after the DOMContentLoaded event fires. This allows time for JavaScript to render interactive elements. Default is 5 seconds.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -headless -pls domcontentloaded -dwt 10
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Captcha Solving&lt;/h3&gt; 
&lt;p&gt;Katana supports automatic captcha detection and solving during headless crawling. When a captcha page is encountered, katana identifies the captcha provider, solves it via an external service, and continues crawling.&lt;/p&gt; 
&lt;p&gt;Supported captcha types: &lt;strong&gt;reCAPTCHA v2&lt;/strong&gt;, &lt;strong&gt;reCAPTCHA v3&lt;/strong&gt;, &lt;strong&gt;reCAPTCHA Enterprise&lt;/strong&gt;, &lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt;, &lt;strong&gt;hCaptcha&lt;/strong&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-captcha-solver-provider&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to specify the captcha solver provider. Currently supported: &lt;code&gt;capsolver&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-captcha-solver-key&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;API key for the captcha solver provider.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -headless -csp capsolver -csk YOUR_API_KEY
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The provider and key can also be set via environment variables:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;export CAPTCHA_SOLVER_PROVIDER=capsolver
export CAPTCHA_SOLVER_KEY=YOUR_API_KEY
katana -u https://example.com -headless
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Scope Control&lt;/h2&gt; 
&lt;p&gt;Crawling can be endless if not scoped, as such katana comes with multiple support to define the crawl scope.&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-field-scope&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Most handy option to define scope with predefined field name, &lt;code&gt;rdn&lt;/code&gt; being default option for field scope.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;rdn&lt;/code&gt; - crawling scoped to root domain name and all subdomains (e.g. &lt;code&gt;*example.com&lt;/code&gt;) (default)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;fqdn&lt;/code&gt; - crawling scoped to given sub(domain) (e.g. &lt;code&gt;www.example.com&lt;/code&gt; or &lt;code&gt;api.example.com&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;dn&lt;/code&gt; - crawling scoped to domain name keyword (e.g. &lt;code&gt;example&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -fs dn
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-crawl-scope&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;For advanced scope control, &lt;code&gt;-cs&lt;/code&gt; option can be used that comes with &lt;strong&gt;regex&lt;/strong&gt; support.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -cs login
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For multiple in scope rules, file input with multiline string / regex can be passed.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ cat in_scope.txt

login/
admin/
app/
wordpress/
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -cs in_scope.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-crawl-out-scope&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;For defining what not to crawl, &lt;code&gt;-cos&lt;/code&gt; option can be used and also support &lt;strong&gt;regex&lt;/strong&gt; input.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -cos logout
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For multiple out of scope rules, file input with multiline string / regex can be passed.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ cat out_of_scope.txt

/logout
/log_out
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -cos out_of_scope.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-no-scope&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Katana is default to scope &lt;code&gt;*.domain&lt;/code&gt;, to disable this &lt;code&gt;-ns&lt;/code&gt; option can be used and also to crawl the internet.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -ns
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-display-out-scope&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;As default, when scope option is used, it also applies for the links to display as output, as such &lt;strong&gt;external URLs are default to exclude&lt;/strong&gt; and to overwrite this behavior, &lt;code&gt;-do&lt;/code&gt; option can be used to display all the external URLs that exist in targets scoped URL / Endpoint.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -do
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Here is all the CLI options for the scope control -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -h scope

Flags:
SCOPE:
   -cs, -crawl-scope string[]       in scope url regex to be followed by crawler
   -cos, -crawl-out-scope string[]  out of scope url regex to be excluded by crawler
   -fs, -field-scope string         pre-defined scope field (dn,rdn,fqdn) (default &quot;rdn&quot;)
   -ns, -no-scope                   disables host based default scope
   -do, -display-out-scope          display external endpoint from scoped crawling
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Crawler Configuration&lt;/h2&gt; 
&lt;p&gt;Katana comes with multiple options to configure and control the crawl as the way we want.&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-depth&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to define the &lt;code&gt;depth&lt;/code&gt; to follow the urls for crawling, the more depth the more number of endpoint being crawled + time for crawl.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -d 5
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-js-crawl&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to enable JavaScript file parsing + crawling the endpoints discovered in JavaScript files, disabled as default.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -jc
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-crawl-duration&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to predefined crawl duration, disabled as default.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -ct 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-known-files&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to enable crawling &lt;code&gt;robots.txt&lt;/code&gt; and &lt;code&gt;sitemap.xml&lt;/code&gt; file, disabled as default.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -kf robotstxt,sitemapxml
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-automatic-form-fill&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to enable automatic form filling for known / unknown fields, known field values can be customized as needed by updating form config file at &lt;code&gt;$HOME/.config/katana/form-config.yaml&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Automatic form filling is experimental feature.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -aff
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Form config values support DSL helper functions for dynamic data generation. All &lt;code&gt;rand_*&lt;/code&gt; functions from the &lt;a href=&quot;https://github.com/projectdiscovery/dsl&quot;&gt;projectdiscovery/dsl&lt;/a&gt; library are available:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# $HOME/.config/katana/form-config.yaml
email: &quot;rand_email()&quot;
phone: &quot;rand_phone()&quot;
placeholder: &quot;rand_first_name()&quot;
password: &#39;rand_base(16, &quot;&quot;)&#39;
color: &quot;#e66465&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-filter-similar&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to filter crawling of similar looking URLs by normalizing variable path segments. This detects IDs, UUIDs, hashes, dates, and other dynamic values, and also learns repeating patterns at runtime. For example, &lt;code&gt;/users/123&lt;/code&gt; and &lt;code&gt;/users/456&lt;/code&gt; are treated as the same endpoint.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -fsu
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The promotion threshold (how many distinct values at a path position before it&#39;s treated as a parameter) can be tuned with &lt;code&gt;-fst&lt;/code&gt;. Lower values are more aggressive (fewer URLs crawled), higher values are more permissive. Default is &lt;code&gt;10&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -fsu -fst 5
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-max-domain-pages&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to limit the number of pages crawled per domain. Prevents any single domain from consuming the entire crawl budget, useful for large sites or crawler trap protection.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -mdp 100
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Knowledge Base Classification&lt;/h2&gt; 
&lt;p&gt;Katana can enrich crawl results with a &lt;strong&gt;knowledge base&lt;/strong&gt; — machine-learning classification of each crawled page powered by &lt;a href=&quot;https://github.com/HappyHackingSpace/dit&quot;&gt;dit&lt;/a&gt;. When enabled, every response is classified by &lt;strong&gt;page type&lt;/strong&gt; (e.g. &lt;code&gt;login&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;captcha&lt;/code&gt;, &lt;code&gt;parked&lt;/code&gt;) and any forms on the page are identified, with the result attached to the &lt;code&gt;knowledgebase&lt;/code&gt; field of the JSONL output. This works across &lt;strong&gt;all engines&lt;/strong&gt; (standard and headless).&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The classification model is &lt;strong&gt;downloaded automatically&lt;/strong&gt; on first use to &lt;code&gt;~/.dit/model.json&lt;/code&gt; (from &lt;a href=&quot;https://huggingface.co/datasets/happyhackingspace/dit&quot;&gt;Hugging Face&lt;/a&gt;). This is a one-time, per-machine cost — subsequent runs reuse the cached model. No manual installation of &lt;code&gt;dit&lt;/code&gt; is required.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-knowledge-base&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Enable knowledge base classification. Page-type and form classification is added to the &lt;code&gt;knowledgebase&lt;/code&gt; field of each result.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -kb -jsonl
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;timestamp&quot;: &quot;...&quot;,
  &quot;request&quot;: { &quot;...&quot;: &quot;...&quot; },
  &quot;response&quot;: {
    &quot;...&quot;: &quot;...&quot;,
    &quot;knowledgebase&quot;: {
      &quot;PageType&quot;: &quot;login&quot;,
      &quot;Forms&quot;: [{ &quot;type&quot;: &quot;login&quot;, &quot;fields&quot;: { &quot;username&quot;: &quot;username or email&quot;, &quot;password&quot;: &quot;password&quot; } }]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-filter-page-type&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Filter results to only the given page type(s). Enabling this implies &lt;code&gt;-kb&lt;/code&gt; (the classifier is initialized automatically).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -fpt login,error
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-kb-secrets&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Enable the secrets extractor in the knowledge base, surfacing detected secrets (API keys, tokens, etc.) under the &lt;code&gt;secrets&lt;/code&gt; key. Add &lt;code&gt;-kb-validate-secrets&lt;/code&gt; to validate detected secrets against their provider — note this &lt;strong&gt;sends live API calls&lt;/strong&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -kb-secrets
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-kb-endpoints&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Enable the endpoints extractor, which classifies requests as REST, GraphQL, SOAP, or XHR under the &lt;code&gt;endpoints&lt;/code&gt; key.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -kb-endpoints
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Authenticated Crawling&lt;/h2&gt; 
&lt;p&gt;Authenticated crawling involves including custom headers or cookies in HTTP requests to access protected resources. These headers provide authentication or authorization information, allowing you to crawl authenticated content / endpoint. You can specify headers directly in the command line or provide them as a file with katana to perform authenticated crawling.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: User needs to be manually perform the authentication and export the session cookie / header to file to use with katana.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-headers&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Option to add a custom header or cookie to the request.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Syntax of &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc7230#section-3.2&quot;&gt;headers&lt;/a&gt; in the HTTP specification&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Here is an example of adding a cookie to the request:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -H &#39;Cookie: usrsess=AmljNrESo&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It is also possible to supply headers or cookies as a file. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ cat cookie.txt

Cookie: PHPSESSIONID=XXXXXXXXX
X-API-KEY: XXXXX
TOKEN=XX
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -H cookie.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;There are more options to configure when needed, here is all the config related CLI options -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -h config

Flags:
CONFIGURATION:
   -r, -resolvers string[]       list of custom resolver (file or comma separated)
   -d, -depth int                maximum depth to crawl (default 3)
   -jc, -js-crawl                enable endpoint parsing / crawling in javascript file
   -ct, -crawl-duration int      maximum duration to crawl the target for
   -kf, -known-files string      enable crawling of known files (all,robotstxt,sitemapxml)
   -mrs, -max-response-size int  maximum response size to read (default 9223372036854775807)
   -timeout int                  time to wait for request in seconds (default 10)
   -aff, -automatic-form-fill    enable automatic form filling (experimental)
   -fx, -form-extraction         enable extraction of form, input, textarea &amp;amp; select elements
   -retry int                    number of times to retry the request (default 1)
   -proxy string                 http/socks5 proxy to use
   -H, -headers string[]         custom header/cookie to include in request
   -config string                path to the katana configuration file
   -fc, -form-config string      path to custom form configuration file
   -flc, -field-config string    path to custom field configuration file
   -s, -strategy string          Visit strategy (depth-first, breadth-first) (default &quot;depth-first&quot;)
   -iqp, -ignore-query-params    Ignore crawling same path with different query-param values
   -fsu, -filter-similar         filter crawling of similar looking URLs (e.g., /users/123 and /users/456)
   -fst, -filter-similar-threshold int  number of distinct values before a path position is treated as parameter (default 10)
   -mdp, -max-domain-pages int   maximum number of pages to crawl per domain (default unlimited)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Connecting to Active Browser Session&lt;/h3&gt; 
&lt;p&gt;Katana can also connect to active browser session where user is already logged in and authenticated. and use it for crawling. The only requirement for this is to start browser with remote debugging enabled.&lt;/p&gt; 
&lt;p&gt;Here is an example of starting chrome browser with remote debugging enabled and using it with katana -&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;step 1) First Locate path of chrome executable&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Operating System&lt;/th&gt; 
   &lt;th&gt;Chromium Executable Location&lt;/th&gt; 
   &lt;th&gt;Google Chrome Executable Location&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Windows (64-bit)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;C:\Program Files (x86)\Google\Chromium\Application\chrome.exe&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;C:\Program Files (x86)\Google\Chrome\Application\chrome.exe&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Windows (32-bit)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;C:\Program Files\Google\Chromium\Application\chrome.exe&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;C:\Program Files\Google\Chrome\Application\chrome.exe&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/Applications/Chromium.app/Contents/MacOS/Chromium&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/Applications/Google Chrome.app/Contents/MacOS/Google Chrome&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/usr/bin/chromium&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/usr/bin/google-chrome&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;step 2) Start chrome with remote debugging enabled and it will return websocker url. For example, on MacOS, you can start chrome with remote debugging enabled using following command&lt;/strong&gt; -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222


DevTools listening on ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Now login to the website you want to crawl and keep the browser open.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;step 3) Now use the websocket url with katana to connect to the active browser session and crawl the website&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: you can use &lt;code&gt;-cdd&lt;/code&gt; option to specify custom chrome data directory to store browser data and cookies but that does not save session data if cookie is set to &lt;code&gt;Session&lt;/code&gt; only or expires after certain time.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;Filters&lt;/h2&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-field&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;Deprecated: use &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/#-output-template&quot;&gt;&lt;strong&gt;&lt;code&gt;-output-template&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; instead. The field flag is still supported for backward compatibility.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;Katana comes with built in fields that can be used to filter the output for the desired information, &lt;code&gt;-f&lt;/code&gt; option can be used to specify any of the available fields.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   -f, -field string  field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Here is a table with examples of each field and expected output when used -&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;FIELD&lt;/th&gt; 
   &lt;th&gt;DESCRIPTION&lt;/th&gt; 
   &lt;th&gt;EXAMPLE&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;URL Endpoint&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://admin.projectdiscovery.io/admin/login?user=admin&amp;amp;password=admin&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qurl&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;URL including query param&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://admin.projectdiscovery.io/admin/login.php?user=admin&amp;amp;password=admin&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;qpath&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Path including query param&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/login?user=admin&amp;amp;password=admin&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;path&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;URL Path&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://admin.projectdiscovery.io/admin/login&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;fqdn&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Fully Qualified Domain name&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;admin.projectdiscovery.io&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rdn&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Root Domain name&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;projectdiscovery.io&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;rurl&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Root URL&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://admin.projectdiscovery.io&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ufile&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;URL with File&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://admin.projectdiscovery.io/login.js&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Filename in URL&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;login.php&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;key&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Parameter keys in URL&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;user,password&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;value&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Parameter values in URL&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;admin,admin&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;kv&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Keys=Values in URL&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;user=admin&amp;amp;password=admin&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;dir&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;URL Directory name&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/admin/&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;udir&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;URL with Directory&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://admin.projectdiscovery.io/admin/&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Here is an example of using field option to only display all the urls with query parameter in it -&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -f qurl -silent

https://shop.tesla.com/en_au?redirect=no
https://shop.tesla.com/en_nz?redirect=no
https://shop.tesla.com/product/men_s-raven-lightweight-zip-up-bomber-jacket?sku=1740250-00-A
https://shop.tesla.com/product/tesla-shop-gift-card?sku=1767247-00-A
https://shop.tesla.com/product/men_s-chill-crew-neck-sweatshirt?sku=1740176-00-A
https://www.tesla.com/about?redirect=no
https://www.tesla.com/about/legal?redirect=no
https://www.tesla.com/findus/list?redirect=no
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Custom Fields&lt;/h3&gt; 
&lt;p&gt;You can create custom fields to extract and store specific information from page responses using regex rules. These custom fields are defined using a YAML config file and are loaded from the default location at &lt;code&gt;$HOME/.config/katana/field-config.yaml&lt;/code&gt;. Alternatively, you can use the &lt;code&gt;-flc&lt;/code&gt; option to load a custom field config file from a different location. Here is example custom field.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;- name: email
  type: regex
  regex:
  - &#39;([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)&#39;
  - &#39;([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)&#39;

- name: phone
  type: regex
  regex:
  - &#39;\d{3}-\d{8}|\d{4}-\d{7}&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;When defining custom fields, following attributes are supported:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;name&lt;/strong&gt; (required)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;The value of &lt;strong&gt;name&lt;/strong&gt; attribute is used as the &lt;code&gt;-field&lt;/code&gt; cli option value.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;type&lt;/strong&gt; (required)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;The type of custom attribute, currently supported option - &lt;code&gt;regex&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;part&lt;/strong&gt; (optional)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;The part of the response to extract the information from. The default value is &lt;code&gt;response&lt;/code&gt;, which includes both the header and body. Other possible values are &lt;code&gt;header&lt;/code&gt; and &lt;code&gt;body&lt;/code&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;group (optional)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;You can use this attribute to select a specific matched group in regex, for example: &lt;code&gt;group: 1&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h4&gt;Running katana using custom field:&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -f email,phone
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-store-field&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;To compliment &lt;code&gt;field&lt;/code&gt; option which is useful to filter output at run time, there is &lt;code&gt;-sf, -store-fields&lt;/code&gt; option which works exactly like field option except instead of filtering, it stores all the information on the disk under &lt;code&gt;katana_field&lt;/code&gt; directory sorted by target url. Use &lt;code&gt;-sfd&lt;/code&gt; or &lt;code&gt;-store-field-dir&lt;/code&gt; to store data in a different location.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -sf key,fqdn,qurl -silent
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ ls katana_field/

https_www.tesla.com_fqdn.txt
https_www.tesla.com_key.txt
https_www.tesla.com_qurl.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;-store-field&lt;/code&gt; option can be useful for collecting information to build a targeted wordlist for various purposes, including but not limited to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Identifying the most commonly used parameters&lt;/li&gt; 
 &lt;li&gt;Discovering frequently used paths&lt;/li&gt; 
 &lt;li&gt;Finding commonly used files&lt;/li&gt; 
 &lt;li&gt;Identifying related or unknown subdomains&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Katana Filters&lt;/h3&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-extension-match&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Crawl output can be easily matched for specific extension using &lt;code&gt;-em&lt;/code&gt; option to ensure to display only output containing given extension.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -silent -em js,jsp,json
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Use the special value &lt;code&gt;none&lt;/code&gt; to also include URLs without a file extension in the output:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -silent -em js,jsp,json,none
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-extension-filter&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Crawl output can be easily filtered for specific extension using &lt;code&gt;-ef&lt;/code&gt; option which ensure to remove all the urls containing given extension.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -silent -ef css,txt,md

&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-no-default-ext-filter&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Katana filters several extensions by default. This can be disabled with the &lt;code&gt;-ndef&lt;/code&gt; option.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -silent -ndef
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-match-regex&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;-match-regex&lt;/code&gt; or &lt;code&gt;-mr&lt;/code&gt; flag allows you to filter output URLs using regular expressions. When using this flag, only URLs that match the specified regular expression will be printed in the output.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -mr &#39;https://shop\.tesla\.com/*&#39; -silent
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-filter-regex&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;-filter-regex&lt;/code&gt; or &lt;code&gt;-fr&lt;/code&gt; flag allows you to filter output URLs using regular expressions. When using this flag, it will skip the URLs that are match the specified regular expression.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -fr &#39;https://www\.tesla\.com/*&#39; -silent
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Advance Filtering&lt;/h3&gt; 
&lt;p&gt;Katana supports DSL-based expressions for advanced matching and filtering capabilities:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;To match endpoints with a 200 status code:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;katana -u https://www.hackerone.com -mdc &#39;status_code == 200&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;To match endpoints that contain &quot;default&quot; and have a status code other than 403:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;katana -u https://www.hackerone.com -mdc &#39;contains(endpoint, &quot;default&quot;) &amp;amp;&amp;amp; status_code != 403&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;To match endpoints with PHP technologies:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;katana -u https://www.hackerone.com -mdc &#39;contains(to_lower(technologies), &quot;php&quot;)&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;To filter out endpoints running on Cloudflare:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;katana -u https://www.hackerone.com -fdc &#39;contains(to_lower(technologies), &quot;cloudflare&quot;)&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;DSL functions can be applied to any keys in the jsonl output. For more information on available DSL functions, please visit the &lt;a href=&quot;https://github.com/projectdiscovery/dsl&quot;&gt;dsl project&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Here are additional filter options -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -h filter

Flags:
FILTER:
   -mr, -match-regex string[]             regex or list of regex to match on output url (cli, file)
   -fr, -filter-regex string[]            regex or list of regex to filter on output url (cli, file)
   -f, -field string                      field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
   -sf, -store-field string               field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
   -em, -extension-match string[]         match output for given extension (eg, -em php,html,js,none)
   -ef, -extension-filter string[]        filter output for given extension (eg, -ef png,css)
   -ndef, -no-default-ext-filter bool     remove default extensions from the filter list
   -mdc, -match-condition string          match response with dsl based condition
   -fdc, -filter-condition string         filter response with dsl based condition
   -duf, -disable-unique-filter           disable duplicate content filtering
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Rate Limit&lt;/h2&gt; 
&lt;p&gt;It&#39;s easy to get blocked / banned while crawling if not following target websites limits, katana comes with multiple option to tune the crawl to go as fast / slow we want.&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-delay&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;option to introduce a delay in seconds between each new request katana makes while crawling, disabled as default.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -delay 20
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-concurrency&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;option to control the number of urls per target to fetch at the same time.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -c 20
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-parallelism&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;option to define number of target to process at same time from list input.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -p 20
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-rate-limit&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Maximum requests per second, applied globally across all hosts.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -rl 100
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-rate-limit-minute&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Maximum requests per minute, applied globally across all hosts.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;katana -u https://tesla.com -rlm 500
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-host-rate-limit&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Maximum requests per second per host. Each host gets its own rate limit bucket, so a slow host won&#39;t throttle fast ones. Replaces the global rate limit when set. Katana also backs off automatically with exponential delay and jitter when a host returns 429 or 503.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -hrl 50
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-host-rate-limit-minute&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;Maximum requests per minute per host.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://tesla.com -hrlm 200
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Here is all long / short CLI options for rate limit control -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -h rate-limit

Flags:
RATE-LIMIT:
   -c, -concurrency int          number of concurrent fetchers to use (default 10)
   -p, -parallelism int          number of concurrent inputs to process (default 10)
   -rd, -delay int               request delay between each request in seconds
   -rl, -rate-limit int          maximum requests to send per second (default 150)
   -rlm, -rate-limit-minute int  maximum number of requests to send per minute
   -hrl, -host-rate-limit int    maximum requests to send per second per host
   -hrlm, -host-rate-limit-minute int  maximum number of requests to send per minute per host
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Output&lt;/h2&gt; 
&lt;p&gt;Katana support both file output in plain text format as well as JSON which includes additional information like, &lt;code&gt;source&lt;/code&gt;, &lt;code&gt;tag&lt;/code&gt;, and &lt;code&gt;attribute&lt;/code&gt; name to co-related the discovered endpoint.&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-output&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;By default, katana outputs the crawled endpoints in plain text format. The results can be written to a file by using the -output option.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -no-scope -output example_endpoints.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-output-template&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;-output-template&lt;/code&gt; option allows you to customize the output format using template, providing flexibility in defining the output structure. This option replaces the deprecated &lt;code&gt;-field&lt;/code&gt; flag for filtering output. Instead of relying on predefined fields, you can specify a custom template directly in the command line to control how the extracted data is presented.&lt;/p&gt; 
&lt;p&gt;Example of using the &lt;code&gt;-output-template&lt;/code&gt; option:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;katana -u https://example.com -output-template &#39;{{email}} - {{url}}&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In this example, &lt;code&gt;email&lt;/code&gt; represents a &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/#custom-fields&quot;&gt;custom field&lt;/a&gt; that extracts and displays email addresses found within the source &lt;code&gt;url&lt;/code&gt;.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;If a specified field does not exist or does not contain a value, it will simply be omitted from the output.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;This option can effectively structure the output in a way that best suits your use case, making data extraction more intuitive and customizable.&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-jsonl&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -jsonl | jq .
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;timestamp&quot;: &quot;2023-03-20T16:23:58.027559+05:30&quot;,
  &quot;request&quot;: {
    &quot;method&quot;: &quot;GET&quot;,
    &quot;endpoint&quot;: &quot;https://example.com&quot;,
    &quot;raw&quot;: &quot;GET / HTTP/1.1\r\nHost: example.com\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\r\nAccept-Encoding: gzip\r\n\r\n&quot;
  },
  &quot;response&quot;: {
    &quot;status_code&quot;: 200,
    &quot;headers&quot;: {
      &quot;accept_ranges&quot;: &quot;bytes&quot;,
      &quot;expires&quot;: &quot;Mon, 27 Mar 2023 10:53:58 GMT&quot;,
      &quot;last_modified&quot;: &quot;Thu, 17 Oct 2019 07:18:26 GMT&quot;,
      &quot;content_type&quot;: &quot;text/html; charset=UTF-8&quot;,
      &quot;server&quot;: &quot;ECS (dcb/7EA3)&quot;,
      &quot;vary&quot;: &quot;Accept-Encoding&quot;,
      &quot;etag&quot;: &quot;\&quot;3147526947\&quot;&quot;,
      &quot;cache_control&quot;: &quot;max-age=604800&quot;,
      &quot;x_cache&quot;: &quot;HIT&quot;,
      &quot;date&quot;: &quot;Mon, 20 Mar 2023 10:53:58 GMT&quot;,
      &quot;age&quot;: &quot;331239&quot;
    },
    &quot;body&quot;: &quot;&amp;lt;!doctype html&amp;gt;\n&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;\n\n    &amp;lt;meta charset=\&quot;utf-8\&quot; /&amp;gt;\n    &amp;lt;meta http-equiv=\&quot;Content-type\&quot; content=\&quot;text/html; charset=utf-8\&quot; /&amp;gt;\n    &amp;lt;meta name=\&quot;viewport\&quot; content=\&quot;width=device-width, initial-scale=1\&quot; /&amp;gt;\n    &amp;lt;style type=\&quot;text/css\&quot;&amp;gt;\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: -apple-system, system-ui, BlinkMacSystemFont, \&quot;Segoe UI\&quot;, \&quot;Open Sans\&quot;, \&quot;Helvetica Neue\&quot;, Helvetica, Arial, sans-serif;\n        \n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 2em;\n        background-color: #fdfdff;\n        border-radius: 0.5em;\n        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        div {\n            margin: 0 auto;\n            width: auto;\n        }\n    }\n    &amp;lt;/style&amp;gt;    \n&amp;lt;/head&amp;gt;\n\n&amp;lt;body&amp;gt;\n&amp;lt;div&amp;gt;\n    &amp;lt;h1&amp;gt;Example Domain&amp;lt;/h1&amp;gt;\n    &amp;lt;p&amp;gt;This domain is for use in illustrative examples in documents. You may use this\n    domain in literature without prior coordination or asking for permission.&amp;lt;/p&amp;gt;\n    &amp;lt;p&amp;gt;&amp;lt;a href=\&quot;https://www.iana.org/domains/example\&quot;&amp;gt;More information...&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/div&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&quot;,
    &quot;technologies&quot;: [
      &quot;Azure&quot;,
      &quot;Amazon ECS&quot;,
      &quot;Amazon Web Services&quot;,
      &quot;Docker&quot;,
      &quot;Azure CDN&quot;
    ],
    &quot;raw&quot;: &quot;HTTP/1.1 200 OK\r\nContent-Length: 1256\r\nAccept-Ranges: bytes\r\nAge: 331239\r\nCache-Control: max-age=604800\r\nContent-Type: text/html; charset=UTF-8\r\nDate: Mon, 20 Mar 2023 10:53:58 GMT\r\nEtag: \&quot;3147526947\&quot;\r\nExpires: Mon, 27 Mar 2023 10:53:58 GMT\r\nLast-Modified: Thu, 17 Oct 2019 07:18:26 GMT\r\nServer: ECS (dcb/7EA3)\r\nVary: Accept-Encoding\r\nX-Cache: HIT\r\n\r\n&amp;lt;!doctype html&amp;gt;\n&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n    &amp;lt;title&amp;gt;Example Domain&amp;lt;/title&amp;gt;\n\n    &amp;lt;meta charset=\&quot;utf-8\&quot; /&amp;gt;\n    &amp;lt;meta http-equiv=\&quot;Content-type\&quot; content=\&quot;text/html; charset=utf-8\&quot; /&amp;gt;\n    &amp;lt;meta name=\&quot;viewport\&quot; content=\&quot;width=device-width, initial-scale=1\&quot; /&amp;gt;\n    &amp;lt;style type=\&quot;text/css\&quot;&amp;gt;\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: -apple-system, system-ui, BlinkMacSystemFont, \&quot;Segoe UI\&quot;, \&quot;Open Sans\&quot;, \&quot;Helvetica Neue\&quot;, Helvetica, Arial, sans-serif;\n        \n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 2em;\n        background-color: #fdfdff;\n        border-radius: 0.5em;\n        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        div {\n            margin: 0 auto;\n            width: auto;\n        }\n    }\n    &amp;lt;/style&amp;gt;    \n&amp;lt;/head&amp;gt;\n\n&amp;lt;body&amp;gt;\n&amp;lt;div&amp;gt;\n    &amp;lt;h1&amp;gt;Example Domain&amp;lt;/h1&amp;gt;\n    &amp;lt;p&amp;gt;This domain is for use in illustrative examples in documents. You may use this\n    domain in literature without prior coordination or asking for permission.&amp;lt;/p&amp;gt;\n    &amp;lt;p&amp;gt;&amp;lt;a href=\&quot;https://www.iana.org/domains/example\&quot;&amp;gt;More information...&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/div&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-store-response&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;-store-response&lt;/code&gt; option allows for writing all crawled endpoint requests and responses to a text file. When this option is used, text files including the request and response will be written to the &lt;strong&gt;katana_response&lt;/strong&gt; directory. If you would like to specify a custom directory, you can use the &lt;code&gt;-store-response-dir&lt;/code&gt; option.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -no-scope -store-response
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ cat katana_response/index.txt

katana_response/example.com/327c3fda87ce286848a574982ddd0b7c7487f816.txt https://example.com (200 OK)
katana_response/www.iana.org/bfc096e6dd93b993ca8918bf4c08fdc707a70723.txt http://www.iana.org/domains/reserved (200 OK)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;code&gt;-store-response&lt;/code&gt; option is not supported in &lt;code&gt;-headless&lt;/code&gt; mode.&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-list-output-fields&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;-list-output-fields&lt;/code&gt; or &lt;code&gt;-lof&lt;/code&gt; flag displays all available fields that can be used in JSONL output format. This is useful for understanding what data is available when using custom output templates or when excluding specific fields.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -lof
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;em&gt;&lt;code&gt;-exclude-output-fields&lt;/code&gt;&lt;/em&gt;&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;-exclude-output-fields&lt;/code&gt; or &lt;code&gt;-eof&lt;/code&gt; flag allows you to exclude specific fields from the JSONL output. This is useful for reducing output size or focusing on specific data by removing unwanted fields.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -u https://example.com -jsonl -eof raw,body
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Here are additional CLI options related to output -&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;katana -h output

OUTPUT:
   -o, -output string                file to write output to
   -sr, -store-response              store http requests/responses
   -srd, -store-response-dir string  store http requests/responses to custom directory
   -lof, -list-output-fields         list available fields for jsonl output format
   -eof, -exclude-output-fields      exclude fields from jsonl output
   -j, -json                         write output in JSON Lines format
   -nc, -no-color                    disable output content coloring (ANSI escape codes)
   -silent                           display output only
   -v, -verbose                      display verbose output
   -version                          display project version
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Katana as a library&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;katana&lt;/code&gt; can be used as a library by creating an instance of the &lt;code&gt;Option&lt;/code&gt; struct and populating it with the same options that would be specified via CLI. Using the options you can create &lt;code&gt;crawlerOptions&lt;/code&gt; and so standard or hybrid &lt;code&gt;crawler&lt;/code&gt;. &lt;code&gt;crawler.Crawl&lt;/code&gt; method should be called to crawl the input.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;package main

import (
	&quot;math&quot;

	&quot;github.com/projectdiscovery/gologger&quot;
	&quot;github.com/projectdiscovery/katana/pkg/engine/standard&quot;
	&quot;github.com/projectdiscovery/katana/pkg/output&quot;
	&quot;github.com/projectdiscovery/katana/pkg/types&quot;
)

func main() {
	options := &amp;amp;types.Options{
		MaxDepth:     3,             // Maximum depth to crawl
		FieldScope:   &quot;rdn&quot;,         // Crawling Scope Field
		BodyReadSize: math.MaxInt,   // Maximum response size to read
		Timeout:      10,            // Timeout is the time to wait for request in seconds
		Concurrency:  10,            // Concurrency is the number of concurrent crawling goroutines
		Parallelism:  10,            // Parallelism is the number of urls processing goroutines
		Delay:        0,             // Delay is the delay between each crawl requests in seconds
		RateLimit:    150,           // Maximum requests to send per second
		Strategy:     &quot;depth-first&quot;, // Visit strategy (depth-first, breadth-first)
		OnResult: func(result output.Result) { // Callback function to execute for result
			gologger.Info().Msg(result.Request.URL)
		},
	}
	crawlerOptions, err := types.NewCrawlerOptions(options)
	if err != nil {
		gologger.Fatal().Msg(err.Error())
	}
	defer crawlerOptions.Close()
	crawler, err := standard.New(crawlerOptions)
	if err != nil {
		gologger.Fatal().Msg(err.Error())
	}
	defer crawler.Close()
	var input = &quot;https://www.hackerone.com&quot;
	err = crawler.Crawl(input)
	if err != nil {
		gologger.Warning().Msgf(&quot;Could not crawl %s: %s&quot;, input, err.Error())
	}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Reporting Issues &amp;amp; Feature Requests&lt;/h2&gt; 
&lt;p&gt;To maintain issue tracking and improve triage efficiency:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;All reports start as &lt;a href=&quot;https://github.com/projectdiscovery/katana/discussions&quot;&gt;GitHub Discussions&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Bug Reports&lt;/strong&gt; → &lt;a href=&quot;https://github.com/projectdiscovery/katana/discussions/new?category=q-a&quot;&gt;Start a Q&amp;amp;A Discussion&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Feature Requests&lt;/strong&gt; → &lt;a href=&quot;https://github.com/projectdiscovery/katana/discussions/new?category=ideas&quot;&gt;Start an Ideas Discussion&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Questions&lt;/strong&gt; → &lt;a href=&quot;https://github.com/projectdiscovery/katana/discussions/new?category=q-a&quot;&gt;Start a Q&amp;amp;A Discussion&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Why Discussions First?&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Community can help&lt;/strong&gt; with quick questions and troubleshooting&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Better triage&lt;/strong&gt; - confirmed bugs/features become tracked issues&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cleaner issue tracker&lt;/strong&gt; - focus on actionable items only&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Maintainers will convert discussions to issues when appropriate after proper review.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;katana is made with ❤️ by the &lt;a href=&quot;https://projectdiscovery.io&quot;&gt;projectdiscovery&lt;/a&gt; team and distributed under &lt;a href=&quot;https://raw.githubusercontent.com/projectdiscovery/katana/dev/LICENSE.md&quot;&gt;MIT License&lt;/a&gt;.&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://discord.gg/projectdiscovery&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/projectdiscovery/nuclei-burp-plugin/main/static/join-discord.png&quot; width=&quot;300&quot; alt=&quot;Join Discord&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/d92d10fcb03b0e5991ffa69e23e645551a979afeb9bc45749b92c65fa1fc9392/projectdiscovery/katana" medium="image" />
      
    </item>
    
    <item>
      <title>ollama/ollama</title>
      <link>https://github.com/ollama/ollama</link>
      <description>&lt;p&gt;Get up and running with Kimi-K2.6, GLM-5.2, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://ollama.com&quot;&gt;https://ollama.com&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://ollama.com&quot;&gt; &lt;img src=&quot;https://github.com/ollama/ollama/assets/3325447/0d0b44e2-8f4a-4e99-9b52-a5c1c741c8f7&quot; alt=&quot;ollama&quot; width=&quot;200&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;h1&gt;Ollama&lt;/h1&gt; 
&lt;p&gt;Start building with open models.&lt;/p&gt; 
&lt;h2&gt;Download&lt;/h2&gt; 
&lt;h3&gt;macOS&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;curl -fsSL https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or &lt;a href=&quot;https://ollama.com/download/Ollama.dmg&quot;&gt;download manually&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;irm https://ollama.com/install.ps1 | iex
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or &lt;a href=&quot;https://ollama.com/download/OllamaSetup.exe&quot;&gt;download manually&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Linux&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;curl -fsSL https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.ollama.com/linux#manual-install&quot;&gt;Manual install instructions&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Docker&lt;/h3&gt; 
&lt;p&gt;The official &lt;a href=&quot;https://hub.docker.com/r/ollama/ollama&quot;&gt;Ollama Docker image&lt;/a&gt; &lt;code&gt;ollama/ollama&lt;/code&gt; is available on Docker Hub.&lt;/p&gt; 
&lt;h3&gt;Libraries&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ollama/ollama-python&quot;&gt;ollama-python&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ollama/ollama-js&quot;&gt;ollama-js&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Community&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discord.gg/ollama&quot;&gt;Discord&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://x.com/ollama&quot;&gt;𝕏 (Twitter)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://reddit.com/r/ollama&quot;&gt;Reddit&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Get started&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;ollama
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You&#39;ll be prompted to run a model or connect Ollama to your existing agents or applications such as &lt;code&gt;Claude Code&lt;/code&gt;, &lt;code&gt;OpenClaw&lt;/code&gt;, &lt;code&gt;OpenCode&lt;/code&gt; , &lt;code&gt;Codex&lt;/code&gt;, &lt;code&gt;Copilot&lt;/code&gt;, and more.&lt;/p&gt; 
&lt;h3&gt;Coding&lt;/h3&gt; 
&lt;p&gt;To launch a specific integration:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ollama launch claude
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Supported integrations include &lt;a href=&quot;https://docs.ollama.com/integrations/claude-code&quot;&gt;Claude Code&lt;/a&gt;, &lt;a href=&quot;https://docs.ollama.com/integrations/codex&quot;&gt;Codex&lt;/a&gt;, &lt;a href=&quot;https://docs.ollama.com/integrations/copilot-cli&quot;&gt;Copilot CLI&lt;/a&gt;, &lt;a href=&quot;https://docs.ollama.com/integrations/deepseek-harness&quot;&gt;DeepSeek Harness&lt;/a&gt;, &lt;a href=&quot;https://docs.ollama.com/integrations/droid&quot;&gt;Droid&lt;/a&gt;, and &lt;a href=&quot;https://docs.ollama.com/integrations/opencode&quot;&gt;OpenCode&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;AI assistant&lt;/h3&gt; 
&lt;p&gt;Use &lt;a href=&quot;https://docs.ollama.com/integrations/openclaw&quot;&gt;OpenClaw&lt;/a&gt; to turn Ollama into a personal AI assistant across WhatsApp, Telegram, Slack, Discord, and more:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ollama launch openclaw
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Chat with a model&lt;/h3&gt; 
&lt;p&gt;Run and chat with &lt;a href=&quot;https://ollama.com/library/gemma4&quot;&gt;Gemma 4&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ollama run gemma4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://ollama.com/library&quot;&gt;ollama.com/library&lt;/a&gt; for the full list.&lt;/p&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://docs.ollama.com/quickstart&quot;&gt;quickstart guide&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;REST API&lt;/h2&gt; 
&lt;p&gt;Ollama has a REST API for running and managing models.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;curl http://localhost:11434/api/chat -d &#39;{
  &quot;model&quot;: &quot;gemma4&quot;,
  &quot;messages&quot;: [{
    &quot;role&quot;: &quot;user&quot;,
    &quot;content&quot;: &quot;Why is the sky blue?&quot;
  }],
  &quot;stream&quot;: false
}&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://docs.ollama.com/api&quot;&gt;API documentation&lt;/a&gt; for all endpoints.&lt;/p&gt; 
&lt;h3&gt;Python&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;pip install ollama
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from ollama import chat

response = chat(model=&#39;gemma4&#39;, messages=[
  {
    &#39;role&#39;: &#39;user&#39;,
    &#39;content&#39;: &#39;Why is the sky blue?&#39;,
  },
])
print(response.message.content)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;JavaScript&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;npm i ollama
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;import ollama from &quot;ollama&quot;;

const response = await ollama.chat({
  model: &quot;gemma4&quot;,
  messages: [{ role: &quot;user&quot;, content: &quot;Why is the sky blue?&quot; }],
});
console.log(response.message.content);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Supported backends&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ggml-org/llama.cpp&quot;&gt;llama.cpp&lt;/a&gt; project founded by Georgi Gerganov.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ollama.com/cli&quot;&gt;CLI reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ollama.com/api&quot;&gt;REST API reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ollama.com/import&quot;&gt;Importing models&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.ollama.com/modelfile&quot;&gt;Modelfile reference&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ollama/ollama/raw/main/docs/development.md&quot;&gt;Building from source&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Community Integrations&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Want to add your project? Open a pull request.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Chat Interfaces&lt;/h3&gt; 
&lt;h4&gt;Web&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/open-webui/open-webui&quot;&gt;Open WebUI&lt;/a&gt; - Extensible, self-hosted AI interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/onyx-dot-app/onyx&quot;&gt;Onyx&lt;/a&gt; - Connected AI workspace&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/danny-avila/LibreChat&quot;&gt;LibreChat&lt;/a&gt; - Enhanced ChatGPT clone with multi-provider support&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lobehub/lobe-chat&quot;&gt;Lobe Chat&lt;/a&gt; - Modern chat framework with plugin ecosystem (&lt;a href=&quot;https://lobehub.com/docs/self-hosting/examples/ollama&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web&quot;&gt;NextChat&lt;/a&gt; - Cross-platform ChatGPT UI (&lt;a href=&quot;https://docs.nextchat.dev/models/ollama&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ItzCrazyKns/Perplexica&quot;&gt;Perplexica&lt;/a&gt; - AI-powered search engine, open-source Perplexity alternative&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/enricoros/big-AGI&quot;&gt;big-AGI&lt;/a&gt; - AI suite for professionals&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ParisNeo/lollms-webui&quot;&gt;Lollms WebUI&lt;/a&gt; - Multi-model web interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sugarforever/chat-ollama&quot;&gt;ChatOllama&lt;/a&gt; - Chatbot with knowledge bases&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bionic-gpt/bionic-gpt&quot;&gt;Bionic GPT&lt;/a&gt; - On-premise AI platform&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ivanfioravanti/chatbot-ollama&quot;&gt;Chatbot UI&lt;/a&gt; - ChatGPT-style web interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fmaclen/hollama&quot;&gt;Hollama&lt;/a&gt; - Minimal web interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Bin-Huang/Chatbox&quot;&gt;Chatbox&lt;/a&gt; - Desktop and web AI client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/swuecho/chat&quot;&gt;chat&lt;/a&gt; - Chat web app for teams&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/datvodinh/rag-chatbot.git&quot;&gt;Ollama RAG Chatbot&lt;/a&gt; - Chat with multiple PDFs using RAG&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/chyok/ollama-gui&quot;&gt;Tkinter-based client&lt;/a&gt; - Python desktop client&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Desktop&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/langgenius/dify&quot;&gt;Dify.AI&lt;/a&gt; - LLM app development platform&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Mintplex-Labs/anything-llm&quot;&gt;AnythingLLM&lt;/a&gt; - All-in-one AI app for Mac, Windows, and Linux&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Mobile-Artificial-Intelligence/maid&quot;&gt;Maid&lt;/a&gt; - Cross-platform mobile and desktop client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nbonamy/witsy&quot;&gt;Witsy&lt;/a&gt; - AI desktop app for Mac, Windows, and Linux&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kangfenmao/cherry-studio&quot;&gt;Cherry Studio&lt;/a&gt; - Multi-provider desktop client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/JHubi1/ollama-app&quot;&gt;Ollama App&lt;/a&gt; - Multi-platform client for desktop and mobile&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/szczyglis-dev/py-gpt&quot;&gt;PyGPT&lt;/a&gt; - AI desktop assistant for Linux, Windows, and Mac&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Jeffser/Alpaca&quot;&gt;Alpaca&lt;/a&gt; - GTK4 client for Linux and macOS&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/aws-samples/swift-chat&quot;&gt;SwiftChat&lt;/a&gt; - Cross-platform including iOS, Android, and Apple Vision Pro&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/AugustDev/enchanted&quot;&gt;Enchanted&lt;/a&gt; - Native macOS and iOS client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/josStorer/RWKV-Runner&quot;&gt;RWKV-Runner&lt;/a&gt; - Multi-model desktop runner&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dezoito/ollama-grid-search&quot;&gt;Ollama Grid Search&lt;/a&gt; - Evaluate and compare models&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Renset/macai&quot;&gt;macai&lt;/a&gt; - macOS client for Ollama and ChatGPT&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MindWorkAI/AI-Studio&quot;&gt;AI Studio&lt;/a&gt; - Multi-provider desktop IDE&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ibrahimcetin/reins&quot;&gt;Reins&lt;/a&gt; - Parameter tuning and reasoning model support&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1runeberg/confichat&quot;&gt;ConfiChat&lt;/a&gt; - Privacy-focused with optional encryption&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kartikm7/llocal&quot;&gt;LLocal.in&lt;/a&gt; - Electron desktop client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://mindmac.app&quot;&gt;MindMac&lt;/a&gt; - AI chat client for Mac&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://msty.app&quot;&gt;Msty&lt;/a&gt; - Multi-model desktop client&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://boltai.com&quot;&gt;BoltAI for Mac&lt;/a&gt; - AI chat client for Mac&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://intellibar.app/&quot;&gt;IntelliBar&lt;/a&gt; - AI-powered assistant for macOS&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.kerlig.com/&quot;&gt;Kerlig AI&lt;/a&gt; - AI writing assistant for macOS&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hillnote.com&quot;&gt;Hillnote&lt;/a&gt; - Markdown-first AI workspace&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.perfectmemory.ai/&quot;&gt;Perfect Memory AI&lt;/a&gt; - Productivity AI personalized by screen and meeting history&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Mobile&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sunshine0523/OllamaServer&quot;&gt;Ollama Android Chat&lt;/a&gt; - One-click Ollama on Android&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;SwiftChat, Enchanted, Maid, Ollama App, Reins, and ConfiChat listed above also support mobile platforms.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Code Editors &amp;amp; Development&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cline/cline&quot;&gt;Cline&lt;/a&gt; - VS Code extension for multi-file/whole-repo coding&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/continuedev/continue&quot;&gt;Continue&lt;/a&gt; - Open-source AI code assistant for any IDE&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/voideditor/void&quot;&gt;Void&lt;/a&gt; - Open source AI code editor, Cursor alternative&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/logancyang/obsidian-copilot&quot;&gt;Copilot for Obsidian&lt;/a&gt; - AI assistant for Obsidian&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rjmacarthy/twinny&quot;&gt;twinny&lt;/a&gt; - Copilot and Copilot chat alternative&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/karthink/gptel&quot;&gt;gptel Emacs client&lt;/a&gt; - LLM client for Emacs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bernardo-bruning/ollama-copilot&quot;&gt;Ollama Copilot&lt;/a&gt; - Use Ollama as GitHub Copilot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pfrankov/obsidian-local-gpt&quot;&gt;Obsidian Local GPT&lt;/a&gt; - Local AI for Obsidian&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/s-kostyaev/ellama&quot;&gt;Ellama Emacs client&lt;/a&gt; - LLM tool for Emacs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xyproto/orbiton&quot;&gt;orbiton&lt;/a&gt; - Config-free text editor with Ollama tab completion&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yaroslavyaroslav/OpenAI-sublime-text&quot;&gt;AI ST Completion&lt;/a&gt; - Sublime Text 4 AI assistant&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vinhnx/vtcode&quot;&gt;VT Code&lt;/a&gt; - Rust-based terminal coding agent with Tree-sitter&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Palm1r/QodeAssist&quot;&gt;QodeAssist&lt;/a&gt; - AI coding assistant for Qt Creator&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://aka.ms/ai-tooklit/ollama-docs&quot;&gt;AI Toolkit for VS Code&lt;/a&gt; - Microsoft-official VS Code extension&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.openinterpreter.com/language-model-setup/local-models/ollama&quot;&gt;Open Interpreter&lt;/a&gt; - Natural language interface for computers&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Libraries &amp;amp; SDKs&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/BerriAI/litellm&quot;&gt;LiteLLM&lt;/a&gt; - Unified API for 100+ LLM providers&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/semantic-kernel/tree/main/python/semantic_kernel/connectors/ai/ollama&quot;&gt;Semantic Kernel&lt;/a&gt; - Microsoft AI orchestration SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/langchain4j/langchain4j&quot;&gt;LangChain4j&lt;/a&gt; - Java LangChain (&lt;a href=&quot;https://github.com/langchain4j/langchain4j-examples/tree/main/ollama-examples/src/main/java&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tmc/langchaingo/&quot;&gt;LangChainGo&lt;/a&gt; - Go LangChain (&lt;a href=&quot;https://github.com/tmc/langchaingo/tree/main/examples/ollama-completion-example&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-ai&quot;&gt;Spring AI&lt;/a&gt; - Spring framework AI support (&lt;a href=&quot;https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://python.langchain.com/docs/integrations/chat/ollama/&quot;&gt;LangChain&lt;/a&gt; and &lt;a href=&quot;https://js.langchain.com/docs/integrations/chat/ollama/&quot;&gt;LangChain.js&lt;/a&gt; with &lt;a href=&quot;https://js.langchain.com/docs/tutorials/local_rag/&quot;&gt;example&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/crmne/ruby_llm&quot;&gt;Ollama for Ruby&lt;/a&gt; - Ruby LLM library&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mozilla-ai/any-llm&quot;&gt;any-llm&lt;/a&gt; - Unified LLM interface by Mozilla&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/awaescher/OllamaSharp&quot;&gt;OllamaSharp for .NET&lt;/a&gt; - .NET SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Abraxas-365/langchain-rust&quot;&gt;LangChainRust&lt;/a&gt; - Rust LangChain (&lt;a href=&quot;https://github.com/Abraxas-365/langchain-rust/raw/main/examples/llm_ollama.rs&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/agents-flex/agents-flex&quot;&gt;Agents-Flex for Java&lt;/a&gt; - Java agent framework (&lt;a href=&quot;https://github.com/agents-flex/agents-flex/tree/main/agents-flex-llm/agents-flex-llm-ollama/src/test/java/com/agentsflex/llm/ollama&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/brainlid/langchain&quot;&gt;Elixir LangChain&lt;/a&gt; - Elixir LangChain&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pepperoni21/ollama-rs&quot;&gt;Ollama-rs for Rust&lt;/a&gt; - Rust SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tryAGI/LangChain&quot;&gt;LangChain for .NET&lt;/a&gt; - .NET LangChain (&lt;a href=&quot;https://github.com/tryAGI/LangChain/raw/main/examples/LangChain.Samples.OpenAI/Program.cs&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/philippgille/chromem-go&quot;&gt;chromem-go&lt;/a&gt; - Go vector database with Ollama embeddings (&lt;a href=&quot;https://github.com/philippgille/chromem-go/tree/v0.5.0/examples/rag-wikipedia-ollama&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/davidmigloz/langchain_dart&quot;&gt;LangChainDart&lt;/a&gt; - Dart LangChain&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lofcz/llmtornado&quot;&gt;LlmTornado&lt;/a&gt; - Unified C# interface for multiple inference APIs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ollama4j/ollama4j&quot;&gt;Ollama4j for Java&lt;/a&gt; - Java SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cloudstudio/ollama-laravel&quot;&gt;Ollama for Laravel&lt;/a&gt; - Laravel integration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mattt/ollama-swift&quot;&gt;Ollama for Swift&lt;/a&gt; - Swift SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.llamaindex.ai/en/stable/examples/llm/ollama/&quot;&gt;LlamaIndex&lt;/a&gt; and &lt;a href=&quot;https://ts.llamaindex.ai/modules/llms/available_llms/ollama&quot;&gt;LlamaIndexTS&lt;/a&gt; - Data framework for LLM apps&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/deepset-ai/haystack-integrations/raw/main/integrations/ollama.md&quot;&gt;Haystack&lt;/a&gt; - AI pipeline framework&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://firebase.google.com/docs/genkit/plugins/ollama&quot;&gt;Firebase Genkit&lt;/a&gt; - Google AI framework&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jmont-dev/ollama-hpp&quot;&gt;Ollama-hpp for C++&lt;/a&gt; - C++ SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/svilupp/PromptingTools.jl&quot;&gt;PromptingTools.jl&lt;/a&gt; - Julia LLM toolkit (&lt;a href=&quot;https://svilupp.github.io/PromptingTools.jl/dev/examples/working_with_ollama&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/JBGruber/rollama&quot;&gt;Ollama for R - rollama&lt;/a&gt; - R SDK&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://portkey.ai/docs/welcome/integration-guides/ollama&quot;&gt;Portkey&lt;/a&gt; - AI gateway&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://testcontainers.com/modules/ollama/&quot;&gt;Testcontainers&lt;/a&gt; - Container-based testing&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/theodo-group/LLPhant?tab=readme-ov-file#ollama&quot;&gt;LLPhant&lt;/a&gt; - PHP AI framework&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Frameworks &amp;amp; Agents&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Significant-Gravitas/AutoGPT/raw/master/docs/content/platform/ollama.md&quot;&gt;AutoGPT&lt;/a&gt; - Autonomous AI agent platform&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/crewAIInc/crewAI&quot;&gt;crewAI&lt;/a&gt; - Multi-agent orchestration framework&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/strands-agents/sdk-python&quot;&gt;Strands Agents&lt;/a&gt; - Model-driven agent building by AWS&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cheshire-cat-ai/core&quot;&gt;Cheshire Cat&lt;/a&gt; - AI assistant framework&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mozilla-ai/any-agent&quot;&gt;any-agent&lt;/a&gt; - Unified agent framework interface by Mozilla&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/stakpak/agent&quot;&gt;Stakpak&lt;/a&gt; - Open source DevOps agent&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hexastack/hexabot&quot;&gt;Hexabot&lt;/a&gt; - Conversational AI builder&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cognizant-ai-lab/neuro-san-studio&quot;&gt;Neuro SAN&lt;/a&gt; - Multi-agent orchestration (&lt;a href=&quot;https://github.com/cognizant-ai-lab/neuro-san-studio/raw/main/docs/user_guide.md#ollama&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;RAG &amp;amp; Knowledge Bases&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/infiniflow/ragflow&quot;&gt;RAGFlow&lt;/a&gt; - RAG engine based on deep document understanding&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SciPhi-AI/R2R&quot;&gt;R2R&lt;/a&gt; - Open-source RAG engine&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1Panel-dev/MaxKB/&quot;&gt;MaxKB&lt;/a&gt; - Ready-to-use RAG chatbot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dmayboroda/minima&quot;&gt;Minima&lt;/a&gt; - On-premises or fully local RAG&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TilmanGriesel/chipper&quot;&gt;Chipper&lt;/a&gt; - AI interface with Haystack RAG&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xark-argo/argo&quot;&gt;ARGO&lt;/a&gt; - RAG and deep research on Mac/Windows/Linux&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nickthecook/archyve&quot;&gt;Archyve&lt;/a&gt; - RAG-enabling document library&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://casibase.org&quot;&gt;Casibase&lt;/a&gt; - AI knowledge base with RAG and SSO&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.nurgo-software.com/products/brainsoup&quot;&gt;BrainSoup&lt;/a&gt; - Native client with RAG and multi-agent automation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Bots &amp;amp; Messaging&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/RockChinQ/LangBot&quot;&gt;LangBot&lt;/a&gt; - Multi-platform messaging bots with agents and RAG&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Soulter/AstrBot/&quot;&gt;AstrBot&lt;/a&gt; - Multi-platform chatbot with RAG and plugins&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kevinthedang/discord-ollama&quot;&gt;Discord-Ollama Chat Bot&lt;/a&gt; - TypeScript Discord bot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ruecat/ollama-telegram&quot;&gt;Ollama Telegram Bot&lt;/a&gt; - Telegram bot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/innightwolfsleep/llm_telegram_bot&quot;&gt;LLM Telegram Bot&lt;/a&gt; - Telegram bot for roleplay&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Terminal &amp;amp; CLI&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sigoden/aichat&quot;&gt;aichat&lt;/a&gt; - All-in-one LLM CLI with Shell Assistant, RAG, and AI tools&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ggozad/oterm&quot;&gt;oterm&lt;/a&gt; - Terminal client for Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sammcj/gollama&quot;&gt;gollama&lt;/a&gt; - Go-based model manager for Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yusufcanb/tlm&quot;&gt;tlm&lt;/a&gt; - Local shell copilot&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pythops/tenere&quot;&gt;tenere&lt;/a&gt; - TUI for LLMs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/paulrobello/parllama&quot;&gt;ParLlama&lt;/a&gt; - TUI for Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/taketwo/llm-ollama&quot;&gt;llm-ollama&lt;/a&gt; - Plugin for &lt;a href=&quot;https://llm.datasette.io/en/stable/&quot;&gt;Datasette&#39;s LLM CLI&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/djcopley/ShellOracle&quot;&gt;ShellOracle&lt;/a&gt; - Shell command suggestions&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mrdjohnson/llm-x&quot;&gt;LLM-X&lt;/a&gt; - Progressive web app for LLMs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pgibler/cmdh&quot;&gt;cmdh&lt;/a&gt; - Natural language to shell commands&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vinhnx/vt.ai&quot;&gt;VT&lt;/a&gt; - Minimal multimodal AI chat app&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Productivity &amp;amp; Apps&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/AppFlowy-IO/AppFlowy&quot;&gt;AppFlowy&lt;/a&gt; - AI collaborative workspace, self-hostable Notion alternative&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mediar-ai/screenpipe&quot;&gt;Screenpipe&lt;/a&gt; - 24/7 screen and mic recording with AI-powered search&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/thewh1teagle/vibe&quot;&gt;Vibe&lt;/a&gt; - Transcribe and analyze meetings&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/n4ze3m/page-assist&quot;&gt;Page Assist&lt;/a&gt; - Chrome extension for AI-powered browsing&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/NativeMindBrowser/NativeMindExtension&quot;&gt;NativeMind&lt;/a&gt; - Private, on-device browser AI assistant&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ParisNeo/ollama_proxy_server&quot;&gt;Ollama Fortress&lt;/a&gt; - Security proxy for Ollama&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/1Panel-dev/1Panel/&quot;&gt;1Panel&lt;/a&gt; - Web-based Linux server management&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Writeopia/Writeopia&quot;&gt;Writeopia&lt;/a&gt; - Text editor with Ollama integration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/reid41/QA-Pilot&quot;&gt;QA-Pilot&lt;/a&gt; - GitHub code repository understanding&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MassimilianoPasquini97/raycast_ollama&quot;&gt;Raycast extension&lt;/a&gt; - Ollama in Raycast&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mateuszmigas/painting-droid&quot;&gt;Painting Droid&lt;/a&gt; - Painting app with AI integrations&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/doolijb/serene-pub&quot;&gt;Serene Pub&lt;/a&gt; - AI roleplaying app&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gitlab.com/mayan-edms/mayan-edms&quot;&gt;Mayan EDMS&lt;/a&gt; - Document management with Ollama workflows&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.tagspaces.org&quot;&gt;TagSpaces&lt;/a&gt; - File management with &lt;a href=&quot;https://docs.tagspaces.org/ai/&quot;&gt;AI tagging&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Observability &amp;amp; Monitoring&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.comet.com/docs/opik/cookbook/ollama&quot;&gt;Opik&lt;/a&gt; - Debug, evaluate, and monitor LLM applications&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/openlit/openlit&quot;&gt;OpenLIT&lt;/a&gt; - OpenTelemetry-native monitoring for Ollama and GPUs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://lunary.ai/docs/integrations/ollama&quot;&gt;Lunary&lt;/a&gt; - LLM observability with analytics and PII masking&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://langfuse.com/docs/integrations/ollama&quot;&gt;Langfuse&lt;/a&gt; - Open source LLM observability&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.honeyhive.ai/integrations/ollama&quot;&gt;HoneyHive&lt;/a&gt; - AI observability and evaluation for agents&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://mlflow.org/docs/latest/llms/tracing/index.html#automatic-tracing&quot;&gt;MLflow Tracing&lt;/a&gt; - Open source LLM observability&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Database &amp;amp; Embeddings&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/timescale/pgai&quot;&gt;pgai&lt;/a&gt; - PostgreSQL as a vector database (&lt;a href=&quot;https://github.com/timescale/pgai/raw/main/docs/vectorizer-quick-start.md&quot;&gt;guide&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mindsdb/mindsdb/raw/staging/mindsdb/integrations/handlers/ollama_handler/README.md&quot;&gt;MindsDB&lt;/a&gt; - Connect Ollama with 200+ data platforms&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/philippgille/chromem-go/raw/v0.5.0/embed_ollama.go&quot;&gt;chromem-go&lt;/a&gt; - Embeddable vector database for Go (&lt;a href=&quot;https://github.com/philippgille/chromem-go/tree/v0.5.0/examples/rag-wikipedia-ollama&quot;&gt;example&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dbkangaroo/kangaroo&quot;&gt;Kangaroo&lt;/a&gt; - AI-powered SQL client&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Infrastructure &amp;amp; Deployment&lt;/h3&gt; 
&lt;h4&gt;Cloud&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cloud.google.com/run/docs/tutorials/gpu-gemma2-with-ollama&quot;&gt;Google Cloud&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://fly.io/docs/python/do-more/add-ollama/&quot;&gt;Fly.io&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.koyeb.com/deploy/ollama&quot;&gt;Koyeb&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/av/harbor&quot;&gt;Harbor&lt;/a&gt; - Containerized LLM toolkit with Ollama as default backend&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Package Managers&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://archlinux.org/packages/extra/x86_64/ollama/&quot;&gt;Pacman&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://formulae.brew.sh/formula/ollama&quot;&gt;Homebrew&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://search.nixos.org/packages?show=ollama&amp;amp;from=0&amp;amp;size=50&amp;amp;sort=relevance&amp;amp;type=packages&amp;amp;query=ollama&quot;&gt;Nix package&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://artifacthub.io/packages/helm/ollama-helm/ollama&quot;&gt;Helm Chart&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gentoo/guru/tree/master/app-misc/ollama&quot;&gt;Gentoo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://flox.dev/blog/ollama-part-one&quot;&gt;Flox&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://codeberg.org/tusharhero/ollama-guix&quot;&gt;Guix channel&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e858f20ed595e7c3cda3107831383b26f7f5ba1632fb03474f835d0b8a6f7865/ollama/ollama" medium="image" />
      
    </item>
    
    <item>
      <title>Gentleman-Programming/engram</title>
      <link>https://github.com/Gentleman-Programming/engram</link>
      <description>&lt;p&gt;Persistent memory system for AI coding agents. Agent-agnostic Go binary with SQLite + FTS5, MCP server, HTTP API, CLI, and TUI.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://engram.gentlemanprogramming.com/&quot;&gt;https://engram.gentlemanprogramming.com/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img width=&quot;1024&quot; alt=&quot;Engram — One Brain. Local or Cloud.&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/assets/branding/engram-banner.png&quot; /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;Persistent memory for AI coding agents&lt;/strong&gt;&lt;br /&gt; &lt;em&gt;One brain. Local or cloud. Agent-agnostic, single binary, zero dependencies.&lt;/em&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://engram.gentlemanprogramming.com/&quot;&gt;&lt;strong&gt;Website&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://gentle-ai.gentlemanprogramming.com/&quot;&gt;&lt;strong&gt;Gentle-AI&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://gentle-ai-wiki.gentlemanprogramming.com/&quot;&gt;&lt;strong&gt;Gentle-AI Wiki&lt;/strong&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/INSTALLATION.md&quot;&gt;Installation&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/RELEASE-POLICY.md&quot;&gt;Release Policy&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/engram-cloud/README.md&quot;&gt;Engram Cloud&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/AGENT-SETUP.md&quot;&gt;Agent Setup&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/CODEBASE-GUIDE.md&quot;&gt;Codebase Guide&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/ARCHITECTURE.md&quot;&gt;Architecture&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/PLUGINS.md&quot;&gt;Plugins&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/TEAM-USAGE.md&quot;&gt;Team Usage&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/CONTRIBUTING.md&quot;&gt;Contributing&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/DOCS.md&quot;&gt;Full Docs&lt;/a&gt; &lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;!--
  sealed_token is a GitHub fine-grained token encrypted against Star History&#39;s
  public key, so only the encrypted value is published here. It is required
  because GitHub restricted the stargazers API to a repository&#39;s admins and
  collaborators on 2026-06-30; without it the chart renders an error placeholder.
  Regenerate it at https://www.star-history.com/?repos=Gentleman-Programming%2Fengram&amp;type=date&amp;legend=top-left
--&gt; 
 &lt;a href=&quot;https://www.star-history.com/?repos=Gentleman-Programming%2Fengram&amp;amp;type=date&amp;amp;legend=top-left&quot;&gt; 
  &lt;picture&gt; 
   &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://api.star-history.com/chart?repos=Gentleman-Programming%2Fengram&amp;amp;type=date&amp;amp;theme=dark&amp;amp;legend=top-left&amp;amp;sealed_token=zwrd_DfwYZeJU7nhGYNtREEheKWYEslW_uzrqORlZ36v-JSMepdqGLkKExp1M-xbNq6t-ebVS5iM3WoPDO26tXbSGkjXC2Jo3kHQ3uNzlRkCrWoqRHkPVQXvosKciY109ObiwGV1z8aajyedcloppmekCGrvVKJb6KWxGLXW_mHcRAVIBZUOa4SzW75D&quot; /&gt; 
   &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://api.star-history.com/chart?repos=Gentleman-Programming%2Fengram&amp;amp;type=date&amp;amp;legend=top-left&amp;amp;sealed_token=zwrd_DfwYZeJU7nhGYNtREEheKWYEslW_uzrqORlZ36v-JSMepdqGLkKExp1M-xbNq6t-ebVS5iM3WoPDO26tXbSGkjXC2Jo3kHQ3uNzlRkCrWoqRHkPVQXvosKciY109ObiwGV1z8aajyedcloppmekCGrvVKJb6KWxGLXW_mHcRAVIBZUOa4SzW75D&quot; /&gt; 
   &lt;img alt=&quot;Star History Chart&quot; src=&quot;https://api.star-history.com/chart?repos=Gentleman-Programming%2Fengram&amp;amp;type=date&amp;amp;legend=top-left&amp;amp;sealed_token=zwrd_DfwYZeJU7nhGYNtREEheKWYEslW_uzrqORlZ36v-JSMepdqGLkKExp1M-xbNq6t-ebVS5iM3WoPDO26tXbSGkjXC2Jo3kHQ3uNzlRkCrWoqRHkPVQXvosKciY109ObiwGV1z8aajyedcloppmekCGrvVKJb6KWxGLXW_mHcRAVIBZUOa4SzW75D&quot; /&gt; 
  &lt;/picture&gt; &lt;/a&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;engram&lt;/strong&gt; &lt;code&gt;/ˈen.ɡræm/&lt;/code&gt; — &lt;em&gt;neuroscience&lt;/em&gt;: the physical trace of a memory in the brain.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Your AI coding agent forgets everything when the session ends. Engram gives it a brain.&lt;/p&gt; 
&lt;p&gt;A &lt;strong&gt;Go binary&lt;/strong&gt; with SQLite + FTS5 full-text search, exposed through CLI, HTTP API, MCP, and an interactive TUI. It works with any MCP-compatible agent, including Claude Code, OpenCode, Gemini CLI, Codex, VS Code (Copilot), Antigravity, Cursor, and Windsurf.&lt;/p&gt; 
&lt;p&gt;No Node.js, Python, or Docker is required: one binary, one SQLite file.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Agent (Claude Code / OpenCode / Gemini CLI / Codex / VS Code / Antigravity / ...)
    ↓ MCP stdio
Engram (single Go binary)
    ↓
SQLite + FTS5 (~/.engram/engram.db)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;For agents&lt;/h2&gt; 
&lt;p&gt;Treat Engram as a curated project memory, not a transcript sink. Use this operating contract throughout the session.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Orient before writing.&lt;/strong&gt; Start with &lt;code&gt;mem_current_project&lt;/code&gt; to confirm the resolved project and its source. At the start of related work, use &lt;code&gt;mem_context&lt;/code&gt; and &lt;code&gt;mem_search&lt;/code&gt; to recover the relevant history.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Search before repeating.&lt;/strong&gt; Before revisiting a decision, bug, convention, or request that may already be known, search with focused terms. Search results are previews, not the complete record.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Retrieve progressively.&lt;/strong&gt; Use &lt;code&gt;mem_search&lt;/code&gt; for candidates, &lt;code&gt;mem_timeline&lt;/code&gt; when surrounding session context matters, and &lt;code&gt;mem_get_observation&lt;/code&gt; before relying on a full observation.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Save significant knowledge deliberately.&lt;/strong&gt; Save completed bug fixes, decisions, discoveries, configuration changes, patterns, and durable user constraints with &lt;code&gt;mem_save&lt;/code&gt;. Do not capture raw tool output or every conversational turn.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Keep evolving knowledge stable.&lt;/strong&gt; Give an evolving topic a stable &lt;code&gt;topic_key&lt;/code&gt; such as &lt;code&gt;architecture/auth-model&lt;/code&gt;; reuse it to update that topic rather than creating competing memories. Use &lt;code&gt;mem_suggest_topic_key&lt;/code&gt; when the key is unclear.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Leave a handoff.&lt;/strong&gt; Before ending a session, save a &lt;code&gt;mem_session_summary&lt;/code&gt; with the goal, instructions, discoveries, accomplished work, next steps, and relevant files.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Recover after compaction.&lt;/strong&gt; Persist the compacted handoff with &lt;code&gt;mem_session_summary&lt;/code&gt; first. Then call &lt;code&gt;mem_context&lt;/code&gt; to recover recent session history before continuing.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;A useful memory is structured&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;**What**: Added retry-safe upload handling.
**Why**: Retries could create duplicate records.
**Where**: internal/upload/handler.go
**Learned**: Reuse the request id as the idempotency key.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Use a short, searchable title and a fitting type with that content. The full &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/DOCS.md#memory-protocol&quot;&gt;Memory Protocol&lt;/a&gt; defines the durable-save rules and session-summary shape.&lt;/p&gt; 
&lt;h3&gt;Choose MCP tools by intent&lt;/h3&gt; 
&lt;p&gt;Tool availability can vary by MCP profile. Start with the intent, then use your client&#39;s tool discovery mechanism (such as &lt;code&gt;ToolSearch&lt;/code&gt;) only when a deferred tool is needed.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Intent&lt;/th&gt; 
   &lt;th&gt;Start with&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Confirm the project and recover recent work&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;mem_current_project&lt;/code&gt;, &lt;code&gt;mem_context&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Find prior knowledge without repeating work&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;mem_search&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Inspect a result in enough detail&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;mem_timeline&lt;/code&gt;, &lt;code&gt;mem_get_observation&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Save or refine durable knowledge&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;mem_save&lt;/code&gt;, &lt;code&gt;mem_update&lt;/code&gt;, &lt;code&gt;mem_suggest_topic_key&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Preserve the user&#39;s request&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;mem_save_prompt&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Hand off or close a session&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;mem_session_summary&lt;/code&gt;, &lt;code&gt;mem_session_start&lt;/code&gt;, &lt;code&gt;mem_session_end&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Review stale knowledge or memory relationships&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;mem_review&lt;/code&gt;, &lt;code&gt;mem_judge&lt;/code&gt;, &lt;code&gt;mem_compare&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Diagnose project or store state&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;mem_doctor&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;For parameters and the complete, current tool reference, see &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/DOCS.md&quot;&gt;the full documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Quick start&lt;/h2&gt; 
&lt;h3&gt;Install&lt;/h3&gt; 
&lt;p&gt;For production use and security support, install the latest stable release from &lt;a href=&quot;https://github.com/Gentleman-Programming/engram/releases&quot;&gt;GitHub Releases&lt;/a&gt;. Release candidates are prerelease validation and feedback builds; choose one only when you accept prerelease risk. See the &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/RELEASE-POLICY.md&quot;&gt;Release Policy&lt;/a&gt; before upgrading.&lt;/p&gt; 
&lt;p&gt;Homebrew remains on the stable v1.20.0 line:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install gentleman-programming/tap/engram
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For Windows, Linux, source builds, and all installation methods, see &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/INSTALLATION.md&quot;&gt;Installation&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Set up your agent&lt;/h3&gt; 
&lt;p&gt;Run the setup command for the agent you use, then restart that agent. &lt;code&gt;engram setup&lt;/code&gt; writes the applicable MCP and integration configuration; it does not require you to start a server for the usual stdio-only setup.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Agent&lt;/th&gt; 
   &lt;th&gt;Setup&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Claude Code&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;claude plugin marketplace add Gentleman-Programming/engram &amp;amp;&amp;amp; claude plugin install engram&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pi&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup pi&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;OpenCode&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup opencode&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Gemini CLI&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup gemini-cli&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Codex&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup codex&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Antigravity CLI&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup antigravity-cli&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Windsurf&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup windsurf&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Qwen Code&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup qwen&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Kiro&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup kiro&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Cursor&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup cursor&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;VS Code (Copilot)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup vscode-copilot&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Kilo Code&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;engram setup kilocode&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Another MCP-compatible agent&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/AGENT-SETUP.md#any-other-mcp-agent&quot;&gt;Manual MCP setup&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/AGENT-SETUP.md&quot;&gt;Agent Setup&lt;/a&gt; for per-agent configuration, plugin behavior, manual MCP setup, compaction resilience, and troubleshooting. Pi users can also find the package at &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/plugin/pi/README.md&quot;&gt;&lt;code&gt;gentle-engram&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Local first, portable when needed&lt;/h2&gt; 
&lt;p&gt;Engram keeps memory local by default. The local SQLite database is authoritative; Git Sync exports portable compressed chunks for sharing across machines, and Engram Cloud is optional, project-scoped replication/shared access with browser visibility.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Need&lt;/th&gt; 
   &lt;th&gt;Start here&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Local memory and the runtime model&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/ARCHITECTURE.md&quot;&gt;Architecture&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Share memory with Git&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/DOCS.md#git-sync-chunked&quot;&gt;Git Sync reference&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Use optional Cloud replication&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/engram-cloud/README.md&quot;&gt;Engram Cloud&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Diagnose or recover Cloud operations&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/engram-cloud/troubleshooting.md&quot;&gt;Cloud troubleshooting&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;For an existing local database, use the guided upgrade sequence. If the dry run reports changes, apply them before bootstrap; otherwise continue directly to bootstrap.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;engram cloud upgrade doctor --project &amp;lt;project&amp;gt;
engram cloud upgrade repair --project &amp;lt;project&amp;gt; --dry-run
engram cloud upgrade repair --project &amp;lt;project&amp;gt; --apply # only when the dry run reports changes
engram cloud upgrade bootstrap --project &amp;lt;project&amp;gt;
engram cloud upgrade status --project &amp;lt;project&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/DOCS.md#cloud-upgrade-flow&quot;&gt;Cloud upgrade reference&lt;/a&gt; for apply, rollback, and recovery details.&lt;/p&gt; 
&lt;h3&gt;Project-aware reads&lt;/h3&gt; 
&lt;p&gt;Project-aware reads use the canonical current project when no selector is supplied: an explicit project, then &lt;code&gt;ENGRAM_PROJECT&lt;/code&gt;, then cwd detection. Use &lt;code&gt;--all&lt;/code&gt; in the CLI or &lt;code&gt;all_projects=true&lt;/code&gt; in HTTP for an intentional global read; do not combine either with an explicit project. &lt;code&gt;engram context&lt;/code&gt; retains its positional project as an alias for &lt;code&gt;--project&lt;/code&gt;. &lt;code&gt;GET /sync/status&lt;/code&gt; supports one resolved project and rejects &lt;code&gt;all_projects=true&lt;/code&gt; because its provider cannot aggregate status.&lt;/p&gt; 
&lt;h2&gt;Terminal UI&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;engram tui
&lt;/code&gt;&lt;/pre&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/assets/tui-dashboard.png&quot; alt=&quot;TUI Dashboard&quot; width=&quot;400&quot; /&gt; &lt;img width=&quot;400&quot; alt=&quot;TUI recent observations&quot; src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/assets/tui-recent.png&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/assets/tui-detail.png&quot; alt=&quot;TUI Observation Detail&quot; width=&quot;400&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/assets/tui-search.png&quot; alt=&quot;TUI Search Results&quot; width=&quot;400&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;Navigate with &lt;code&gt;j&lt;/code&gt;/&lt;code&gt;k&lt;/code&gt;, use &lt;code&gt;Enter&lt;/code&gt; to drill in, &lt;code&gt;c&lt;/code&gt; to copy content to the clipboard, &lt;code&gt;/&lt;/code&gt; to search, and &lt;code&gt;Esc&lt;/code&gt; to go back. The TUI uses the Catppuccin Mocha theme.&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Doc&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/INSTALLATION.md&quot;&gt;Installation&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Platform support and all installation methods&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/RELEASE-POLICY.md&quot;&gt;Release Policy&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Stable, RC, security-support, upgrade, and rollback guidance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/AGENT-SETUP.md&quot;&gt;Agent Setup&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Per-agent configuration and compaction resilience&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/intended-usage.md&quot;&gt;Intended Usage&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;The human mental model for using Engram&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/ARCHITECTURE.md&quot;&gt;Architecture&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Memory model, tool behavior, and project structure&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/CODEBASE-GUIDE.md&quot;&gt;Codebase Guide&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Repository structure, flows, and implementation landmarks&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/PLUGINS.md&quot;&gt;Plugins&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;OpenCode and Claude Code plugin details&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/TEAM-USAGE.md&quot;&gt;Team Usage&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Shared-memory conventions&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/engram-cloud/README.md&quot;&gt;Engram Cloud&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Cloud quickstart, deployment, and technical links&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/DOCTOR.md&quot;&gt;Doctor&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Operational diagnosis and repair workflows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/SELF-TESTING.md&quot;&gt;Binary self-testing&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Isolated reliability and performance checks for released binaries&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/BETA_TESTING.md&quot;&gt;Beta Testing&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Isolated beta testing flows and cleanup guidance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/COMPARISON.md&quot;&gt;Comparison&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Engram compared with claude-mem&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/docs/beta/obsidian-brain.md&quot;&gt;Obsidian Brain&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Export memories as an Obsidian knowledge graph (beta)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/DOCS.md&quot;&gt;Full Docs&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Complete CLI, environment, API, and operational reference&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Dashboard contributors:&lt;/strong&gt; if you modify &lt;code&gt;.templ&lt;/code&gt; files in &lt;code&gt;internal/cloud/dashboard/&lt;/code&gt;, run &lt;code&gt;make templ&lt;/code&gt; to regenerate before committing. See &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/DOCS.md#dashboard-templ-regeneration&quot;&gt;Dashboard templ regeneration&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Every change starts with an approved issue. See &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/CONTRIBUTING.md&quot;&gt;Contributing&lt;/a&gt; for the issue-first workflow, labels, review requirements, and contributor standards.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Trademark notice:&lt;/strong&gt; The Engram names and logos are trademarks of Alan Buscaglia. The MIT License applies to the code; it does not permit implying endorsement or official affiliation. See &lt;a href=&quot;https://raw.githubusercontent.com/Gentleman-Programming/engram/main/TRADEMARKS.md&quot;&gt;TRADEMARKS.md&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;MIT&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;strong&gt;Inspired by &lt;a href=&quot;https://github.com/thedotmack/claude-mem&quot;&gt;claude-mem&lt;/a&gt;&lt;/strong&gt; — but agent-agnostic, simpler, and built different.&lt;/p&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;a href=&quot;https://github.com/Gentleman-Programming/engram/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=Gentleman-Programming/engram&amp;amp;max=100&quot; /&gt; &lt;/a&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/336c90707430bd0103506df0e9db0074ec2898fd224cae87a2e0b33303450999/Gentleman-Programming/engram" medium="image" />
      
    </item>
    
    <item>
      <title>google/go-github</title>
      <link>https://github.com/google/go-github</link>
      <description>&lt;p&gt;Go library for accessing the GitHub v3 API&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://pkg.go.dev/github.com/google/go-github/v89/github&quot;&gt;https://pkg.go.dev/github.com/google/go-github/v89/github&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;go-github&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/google/go-github/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/google/go-github?sort=semver&quot; alt=&quot;go-github release (latest SemVer)&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://pkg.go.dev/github.com/google/go-github/v91/github&quot;&gt;&lt;img src=&quot;https://img.shields.io/static/v1?label=godoc&amp;amp;message=reference&amp;amp;color=blue&quot; alt=&quot;Go Reference&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/google/go-github/actions/workflows/tests.yml&quot;&gt;&lt;img src=&quot;https://github.com/google/go-github/actions/workflows/tests.yml/badge.svg?branch=master&quot; alt=&quot;Test Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/google/go-github&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/google/go-github/branch/master/graph/badge.svg?sanitize=true&quot; alt=&quot;Test Coverage&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://groups.google.com/group/go-github&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/discuss-go--github%40googlegroups.com-blue.svg?sanitize=true&quot; alt=&quot;Discuss at go-github@googlegroups.com&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://bestpractices.coreinfrastructure.org/projects/796&quot;&gt;&lt;img src=&quot;https://bestpractices.coreinfrastructure.org/projects/796/badge&quot; alt=&quot;CII Best Practices&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;go-github is a Go client library for accessing the &lt;a href=&quot;https://docs.github.com/en/rest&quot;&gt;GitHub API v3&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;go-github tracks &lt;a href=&quot;https://golang.org/doc/devel/release.html#policy&quot;&gt;Go&#39;s version support policy&lt;/a&gt; supporting any minor version of the latest two major releases of Go and the go directive in go.mod reflects that. We do our best not to break older versions of Go if we don&#39;t have to, but we don&#39;t explicitly test older versions and as of Go 1.26 the go directive in go.mod declares a hard required &lt;em&gt;minimum&lt;/em&gt; version of Go to use with this module and this &lt;em&gt;must&lt;/em&gt; be greater than or equal to the go line of all dependencies so go-github will require the N-1 major release of Go by default.&lt;/p&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;p&gt;If you&#39;re interested in using the &lt;a href=&quot;https://developer.github.com/v4/&quot;&gt;GraphQL API v4&lt;/a&gt;, the recommended library is &lt;a href=&quot;https://github.com/shurcooL/githubv4&quot;&gt;shurcooL/githubv4&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;go-github is compatible with modern Go releases in module mode, with Go installed:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/google/go-github/v91
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;will resolve and add the package to the current development module, along with its dependencies.&lt;/p&gt; 
&lt;p&gt;Alternatively the same can be achieved if you use import in a package:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;import &quot;github.com/google/go-github/v91/github&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and run &lt;code&gt;go get&lt;/code&gt; without parameters.&lt;/p&gt; 
&lt;p&gt;Finally, to use the top-of-trunk version of this repo, use the following command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go get github.com/google/go-github/v91@master
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To discover all the changes that have occurred since a prior release, you can first clone the repo, then run (for example):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;go run tools/gen-release-notes/main.go --tag v91.0.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;import &quot;github.com/google/go-github/v91/github&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Construct a new GitHub client, then use the various services on the client to access different parts of the GitHub API. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;client, err := github.NewClient()
if err != nil {
	// Handle error.
}

// list all organizations for user &quot;willnorris&quot;
orgs, _, err := client.Organizations.List(context.Background(), &quot;willnorris&quot;, nil)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Some API methods have optional parameters that can be passed. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;client, err := github.NewClient()
if err != nil {
	// Handle error.
}

// list public repositories for org &quot;github&quot;
opt := &amp;amp;github.RepositoryListByOrgOptions{Type: &quot;public&quot;}
repos, _, err := client.Repositories.ListByOrg(context.Background(), &quot;github&quot;, opt)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The services of a client divide the API into logical chunks and correspond to the structure of the &lt;a href=&quot;https://docs.github.com/en/rest&quot;&gt;GitHub API documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;NOTE: Using the &lt;a href=&quot;https://pkg.go.dev/context&quot;&gt;context&lt;/a&gt; package, one can easily pass cancellation signals and deadlines to various services of the client for handling a request. In case there is no context available, then &lt;code&gt;context.Background()&lt;/code&gt; can be used as a starting point.&lt;/p&gt; 
&lt;p&gt;For more sample code snippets, head over to the &lt;a href=&quot;https://github.com/google/go-github/tree/master/example&quot;&gt;example&lt;/a&gt; directory.&lt;/p&gt; 
&lt;h3&gt;Authentication&lt;/h3&gt; 
&lt;p&gt;Use the &lt;code&gt;github.WithAuthToken&lt;/code&gt; options method to configure your client to authenticate using an OAuth token (for example, a &lt;a href=&quot;https://github.com/blog/1509-personal-api-tokens&quot;&gt;personal access token&lt;/a&gt;). This is what is needed for a majority of use cases aside from GitHub Apps.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;client, err := github.NewClient(github.WithAuthToken(&quot;... your access token ...&quot;))
if err != nil {
	// Handle error.
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To support more advanced use cases; you can use the &lt;code&gt;github.WithTransport&lt;/code&gt; option to provide a custom &lt;code&gt;http.RoundTripper&lt;/code&gt; that handles authentication for you, or the &lt;code&gt;github.WithHTTPClient&lt;/code&gt; option to provide a custom &lt;code&gt;http.Client&lt;/code&gt;. As an example; you can use the &lt;code&gt;oauth2.Transport&lt;/code&gt; from the &lt;a href=&quot;https://pkg.go.dev/golang.org/x/oauth2&quot;&gt;golang.org/x/oauth2&lt;/a&gt; package to handle OAuth token refreshing for you.&lt;/p&gt; 
&lt;p&gt;Note that when using an authenticated Client, all calls made by the client will include the specified OAuth token. Therefore, authenticated clients should almost never be shared between different users.&lt;/p&gt; 
&lt;p&gt;For API methods that require HTTP Basic Authentication, use the &lt;a href=&quot;https://pkg.go.dev/github.com/google/go-github/v91/github#BasicAuthTransport&quot;&gt;&lt;code&gt;BasicAuthTransport&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;As a GitHub App&lt;/h4&gt; 
&lt;p&gt;GitHub Apps authentication can be provided by different pkgs like &lt;a href=&quot;https://github.com/bradleyfalzon/ghinstallation&quot;&gt;bradleyfalzon/ghinstallation&lt;/a&gt; or &lt;a href=&quot;https://github.com/jferrl/go-githubauth&quot;&gt;jferrl/go-githubauth&lt;/a&gt;.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Most endpoints (ex. &lt;a href=&quot;https://docs.github.com/en/rest/rate-limit#get-rate-limit-status-for-the-authenticated-user&quot;&gt;&lt;code&gt;GET /rate_limit&lt;/code&gt;&lt;/a&gt;) require access token authentication while a few others (ex. &lt;a href=&quot;https://docs.github.com/en/rest/apps/webhooks#list-deliveries-for-an-app-webhook&quot;&gt;&lt;code&gt;GET /app/hook/deliveries&lt;/code&gt;&lt;/a&gt;) require &lt;a href=&quot;https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-as-a-github-app&quot;&gt;JWT&lt;/a&gt; authentication.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;code&gt;ghinstallation&lt;/code&gt; provides &lt;code&gt;Transport&lt;/code&gt;, which implements &lt;code&gt;http.RoundTripper&lt;/code&gt; to provide authentication as an installation for GitHub Apps.&lt;/p&gt; 
&lt;p&gt;Here is an example of how to authenticate as a GitHub App using the &lt;code&gt;ghinstallation&lt;/code&gt; package:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;import (
	&quot;net/http&quot;

	&quot;github.com/bradleyfalzon/ghinstallation/v2&quot;
	&quot;github.com/google/go-github/v91/github&quot;
)

func main() {
	// Wrap the shared transport for use with the integration ID 1 authenticating with installation ID 99.
	itr, err := ghinstallation.NewKeyFromFile(http.DefaultTransport, 1, 99, &quot;2016-10-19.private-key.pem&quot;)

	// Or for endpoints that require JWT authentication
	// itr, err := ghinstallation.NewAppsTransportKeyFromFile(http.DefaultTransport, 1, &quot;2016-10-19.private-key.pem&quot;)

	if err != nil {
		// Handle error.
	}

	// Use installation transport with client.
	client, err := github.NewClient(github.WithTransport(itr))
	if err != nil {
		// Handle error.
	}

	// Use client...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;go-githubauth&lt;/code&gt; implements a set of &lt;code&gt;oauth2.TokenSource&lt;/code&gt; to be used with &lt;code&gt;oauth2.Client&lt;/code&gt;. An &lt;code&gt;oauth2.Client&lt;/code&gt; can be injected into the &lt;code&gt;github.Client&lt;/code&gt; to authenticate requests.&lt;/p&gt; 
&lt;p&gt;Another example using &lt;code&gt;go-githubauth&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;package main

import (
	&quot;context&quot;
	&quot;fmt&quot;
	&quot;os&quot;
	&quot;strconv&quot;

	&quot;github.com/google/go-github/v91/github&quot;
	&quot;github.com/jferrl/go-githubauth&quot;
	&quot;golang.org/x/oauth2&quot;
)

func main() {
	privateKey := []byte(os.Getenv(&quot;GITHUB_APP_PRIVATE_KEY&quot;))

	appTokenSource, err := githubauth.NewApplicationTokenSource(1112, privateKey)
	if err != nil {
		fmt.Println(&quot;Error creating application token source:&quot;, err)
		return
	 }

	installationTokenSource := githubauth.NewInstallationTokenSource(1113, appTokenSource)

	// oauth2.NewClient uses oauth2.ReuseTokenSource to reuse the token until it expires.
	// The token will be automatically refreshed when it expires.
	// InstallationTokenSource has the mechanism to refresh the token when it expires.
	httpClient := oauth2.NewClient(context.Background(), installationTokenSource)

	client, err := github.NewClient(github.WithHTTPClient(httpClient))
	if err != nil {
		// Handle error.
	}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: In order to interact with certain APIs, for example writing a file to a repo, one must generate an installation token using the installation ID of the GitHub app and authenticate with the OAuth method mentioned above. See the examples.&lt;/p&gt; 
&lt;h3&gt;Rate Limiting&lt;/h3&gt; 
&lt;p&gt;GitHub imposes rate limits on all API clients. The &lt;a href=&quot;https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api#about-primary-rate-limits&quot;&gt;primary rate limit&lt;/a&gt; is the limit to the number of REST API requests that a client can make within a specific amount of time. This limit helps prevent abuse and denial-of-service attacks, and ensures that the API remains available for all users. Some endpoints, like the search endpoints, have more restrictive limits. Unauthenticated clients may request public data but have a low rate limit, while authenticated clients have rate limits based on the client identity.&lt;/p&gt; 
&lt;p&gt;In addition to primary rate limits, GitHub enforces &lt;a href=&quot;https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api#about-secondary-rate-limits&quot;&gt;secondary rate limits&lt;/a&gt; in order to prevent abuse and keep the API available for all users. Secondary rate limits generally limit the number of concurrent requests that a client can make.&lt;/p&gt; 
&lt;p&gt;The client returned &lt;code&gt;Response.Rate&lt;/code&gt; value contains the rate limit information from the most recent API call. If a recent enough response isn&#39;t available, you can use the client &lt;code&gt;RateLimits&lt;/code&gt; service to fetch the most up-to-date rate limit data for the client.&lt;/p&gt; 
&lt;p&gt;To detect a primary API rate limit error, you can check if the error is a &lt;code&gt;RateLimitError&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;repos, _, err := client.Repositories.List(ctx, &quot;&quot;, nil)
var rateErr *github.RateLimitError
if errors.As(err, &amp;amp;rateErr) {
	log.Printf(&quot;hit primary rate limit, used %v of %v\n&quot;, rateErr.Rate.Used, rateErr.Rate.Limit)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To detect an API secondary rate limit error, you can check if the error is an &lt;code&gt;AbuseRateLimitError&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;repos, _, err := client.Repositories.List(ctx, &quot;&quot;, nil)
var rateErr *github.AbuseRateLimitError
if errors.As(err, &amp;amp;rateErr) {
	log.Printf(&quot;hit secondary rate limit, retry after %v\n&quot;, rateErr.RetryAfter)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you hit the primary rate limit, you can use the &lt;code&gt;SleepUntilPrimaryRateLimitResetWhenRateLimited&lt;/code&gt; method to block until the rate limit is reset.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;repos, _, err := client.Repositories.List(context.WithValue(ctx, github.SleepUntilPrimaryRateLimitResetWhenRateLimited, true), &quot;&quot;, nil)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you need to make a request even if the rate limit has been hit you can use the &lt;code&gt;BypassRateLimitCheck&lt;/code&gt; method to bypass the rate limit check and make the request anyway.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;repos, _, err := client.Repositories.List(context.WithValue(ctx, github.BypassRateLimitCheck, true), &quot;&quot;, nil)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more advanced use cases, you can use &lt;a href=&quot;https://github.com/gofri/go-github-ratelimit&quot;&gt;gofri/go-github-ratelimit&lt;/a&gt; which provides a middleware (&lt;code&gt;http.RoundTripper&lt;/code&gt;) that handles both the primary rate limit and secondary rate limit for the GitHub API. In this case you can set the client &lt;code&gt;DisableRateLimitCheck&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; so the client doesn&#39;t track the rate limit usage.&lt;/p&gt; 
&lt;p&gt;If the client is an &lt;a href=&quot;https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api#primary-rate-limit-for-oauth-apps&quot;&gt;OAuth app&lt;/a&gt; you can use the apps higher rate limit to request public data by using the &lt;code&gt;UnauthenticatedRateLimitedTransport&lt;/code&gt; to make calls as the app instead of as the user.&lt;/p&gt; 
&lt;h3&gt;Accepted Status&lt;/h3&gt; 
&lt;p&gt;Some endpoints may return a 202 Accepted status code, meaning that the information required is not yet ready and was scheduled to be gathered on the GitHub side. Methods known to behave like this are documented specifying this behavior.&lt;/p&gt; 
&lt;p&gt;To detect this condition of error, you can check if its type is &lt;code&gt;*github.AcceptedError&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;stats, _, err := client.Repositories.ListContributorsStats(ctx, org, repo)
if errors.As(err, new(*github.AcceptedError)) {
	log.Println(&quot;scheduled on GitHub side&quot;)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Conditional Requests&lt;/h3&gt; 
&lt;p&gt;The GitHub REST API has good support for &lt;a href=&quot;https://docs.github.com/en/rest/using-the-rest-api/best-practices-for-using-the-rest-api?apiVersion=2022-11-28#use-conditional-requests-if-appropriate&quot;&gt;conditional HTTP requests&lt;/a&gt; via the &lt;code&gt;ETag&lt;/code&gt; header which will help prevent you from burning through your rate limit, as well as help speed up your application. &lt;code&gt;go-github&lt;/code&gt; does not handle conditional requests directly, but is instead designed to work with a caching &lt;code&gt;http.Transport&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Typically, an &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc9111&quot;&gt;RFC 9111&lt;/a&gt; compliant HTTP cache such as &lt;a href=&quot;https://github.com/bartventer/httpcache&quot;&gt;bartventer/httpcache&lt;/a&gt; is recommended, ex:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;import (
	&quot;github.com/bartventer/httpcache&quot;
	_ &quot;github.com/bartventer/httpcache/store/memcache&quot; // Register the in-memory backend
)

client, err := github.NewClient(github.WithHTTPClient(httpcache.NewClient(&quot;memcache://&quot;)), github.WithAuthToken(os.Getenv(&quot;GITHUB_TOKEN&quot;)))
if err != nil {
	// Handle error.
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, the &lt;a href=&quot;https://github.com/bored-engineer/github-conditional-http-transport&quot;&gt;bored-engineer/github-conditional-http-transport&lt;/a&gt; package relies on (undocumented) GitHub specific cache logic and is recommended when making requests using short-lived credentials such as a &lt;a href=&quot;https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation&quot;&gt;GitHub App installation token&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Creating and Updating Resources&lt;/h3&gt; 
&lt;p&gt;All structs for GitHub resources use pointer values for all non-repeated fields. This allows distinguishing between unset fields and those set to a zero-value. Use the &lt;code&gt;new&lt;/code&gt; builtin to easily create these pointers for string, bool, and int values. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;// create a new private repository named &quot;foo&quot;
repo := &amp;amp;github.Repository{
	Name:    new(&quot;foo&quot;),
	Private: new(true),
}
client.Repositories.Create(ctx, &quot;&quot;, repo)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Users who have worked with protocol buffers should find this pattern familiar.&lt;/p&gt; 
&lt;h3&gt;Pagination&lt;/h3&gt; 
&lt;p&gt;All requests for resource collections (repos, pull requests, issues, etc.) support pagination. Pagination options using page numbers are described in the &lt;code&gt;github.ListOptions&lt;/code&gt; struct and passed to the list methods directly or as an embedded type of a more specific list options struct (for example &lt;code&gt;github.PullRequestListOptions&lt;/code&gt;). Pages information is available via the &lt;code&gt;github.Response&lt;/code&gt; struct.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;client, err := github.NewClient()
if err != nil {
	// Handle error.
}

opt := &amp;amp;github.RepositoryListByOrgOptions{
	ListOptions: github.ListOptions{PerPage: 10},
}
// get all pages of results
var allRepos []*github.Repository
for {
	repos, resp, err := client.Repositories.ListByOrg(ctx, &quot;github&quot;, opt)
	if err != nil {
		return err
	}
	allRepos = append(allRepos, repos...)
	if resp.NextPage == 0 {
		break
	}
	opt.Page = resp.NextPage
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Pagination options using string cursors are described in the &lt;code&gt;github.ListCursorOptions&lt;/code&gt; struct and passed to the list methods directly or as an embedded type of a more specific list cursor options struct (for example &lt;code&gt;github.ListGlobalSecurityAdvisoriesOptions&lt;/code&gt;). Similarly, cursor and pages information is available via the &lt;code&gt;github.Response&lt;/code&gt; struct.&lt;/p&gt; 
&lt;h4&gt;Iterators&lt;/h4&gt; 
&lt;p&gt;Go v1.23 introduces the new &lt;code&gt;iter&lt;/code&gt; package.&lt;/p&gt; 
&lt;p&gt;The new &lt;code&gt;github/gen-iterators.go&lt;/code&gt; file auto-generates &quot;*Iter&quot; methods in &lt;code&gt;github/github-iterators.go&lt;/code&gt; for all methods that support page number iteration (using the &lt;code&gt;NextPage&lt;/code&gt; field in each response) or string cursor iteration (using the &lt;code&gt;After&lt;/code&gt; field in each response). To handle rate limiting issues, make sure to use a rate-limiting transport. (See &lt;a href=&quot;https://raw.githubusercontent.com/google/go-github/master/#rate-limiting&quot;&gt;Rate Limiting&lt;/a&gt; above for more details.) To use these methods, simply create an iterator and then range over it, for example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;client, err := github.NewClient()
if err != nil {
	// Handle error.
}
var allRepos []*github.Repository

// create an iterator and start looping through all the results
iter := client.Repositories.ListIter(ctx, &quot;github&quot;, nil)
for repo, err := range iter {
	if err != nil {
		log.Fatal(err)
	}
	allRepos = append(allRepos, repo)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, if you wish to use an external package, there is &lt;code&gt;enrichman/gh-iter&lt;/code&gt;. Its iterator will handle pagination for you, looping through all the available results.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;client, err := github.NewClient()
if err != nil {
	// Handle error.
}
var allRepos []*github.Repository

// create an iterator and start looping through all the results
repos := ghiter.NewFromFn1(client.Repositories.ListByOrg, &quot;github&quot;)
for repo := range repos.All() {
	allRepos = append(allRepos, repo)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For complete usage of &lt;code&gt;enrichman/gh-iter&lt;/code&gt;, see the full &lt;a href=&quot;https://github.com/enrichman/gh-iter&quot;&gt;package docs&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Middleware&lt;/h4&gt; 
&lt;p&gt;You can use &lt;a href=&quot;https://github.com/gofri/go-github-pagination&quot;&gt;gofri/go-github-pagination&lt;/a&gt; to handle pagination for you. It supports both sync and async modes, as well as customizations. By default, the middleware automatically paginates through all pages, aggregates results, and returns them as an array. See &lt;code&gt;example/ratelimit/main.go&lt;/code&gt; for usage.&lt;/p&gt; 
&lt;h3&gt;Webhooks&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;go-github&lt;/code&gt; provides structs for almost all &lt;a href=&quot;https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads&quot;&gt;GitHub webhook events&lt;/a&gt; as well as functions to validate them and unmarshal JSON payloads from &lt;code&gt;http.Request&lt;/code&gt; structs.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-go&quot;&gt;func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	payload, err := github.ValidatePayload(r, s.webhookSecretKey)
	if err != nil { ... }
	event, err := github.ParseWebHook(github.WebHookType(r), payload)
	if err != nil { ... }
	switch event := event.(type) {
	case *github.CommitCommentEvent:
		processCommitCommentEvent(event)
	case *github.CreateEvent:
		processCreateEvent(event)
	...
	}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Furthermore, there are libraries like &lt;a href=&quot;https://github.com/cbrgm/githubevents&quot;&gt;cbrgm/githubevents&lt;/a&gt; that build upon the example above and provide functions to subscribe callbacks to specific events.&lt;/p&gt; 
&lt;p&gt;For complete usage of go-github, see the full &lt;a href=&quot;https://pkg.go.dev/github.com/google/go-github/v91/github&quot;&gt;package docs&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Testing code that uses &lt;code&gt;go-github&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;The repo &lt;a href=&quot;https://github.com/migueleliasweb/go-github-mock&quot;&gt;migueleliasweb/go-github-mock&lt;/a&gt; provides a way to mock responses. Check the repo for more details.&lt;/p&gt; 
&lt;h3&gt;Integration Tests&lt;/h3&gt; 
&lt;p&gt;You can run integration tests from the &lt;code&gt;test&lt;/code&gt; directory. See the integration tests &lt;a href=&quot;https://raw.githubusercontent.com/google/go-github/master/test/README.md&quot;&gt;README&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;I would like to cover the entire GitHub API and contributions are of course always welcome. The calling pattern is pretty well established, so adding new methods is relatively straightforward. See &lt;a href=&quot;https://raw.githubusercontent.com/google/go-github/master/CONTRIBUTING.md&quot;&gt;&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;&lt;/a&gt; for details.&lt;/p&gt; 
&lt;h2&gt;Versioning&lt;/h2&gt; 
&lt;p&gt;In general, go-github follows &lt;a href=&quot;https://semver.org/&quot;&gt;semver&lt;/a&gt; as closely as we can for tagging releases of the package. For self-contained libraries, the application of semantic versioning is relatively straightforward and generally understood. But because go-github is a client library for the GitHub API, which itself changes behavior, and because we are typically pretty aggressive about implementing preview features of the GitHub API, we&#39;ve adopted the following versioning policy:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;We increment the &lt;strong&gt;major version&lt;/strong&gt; with any incompatible change to non-preview functionality, including changes to the exported Go API surface or behavior of the API.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;We increment the &lt;strong&gt;minor version&lt;/strong&gt; with any backwards-compatible changes to functionality, as well as any changes to preview functionality in the GitHub API. GitHub makes no guarantee about the stability of preview functionality, so neither do we consider it a stable part of the go-github API.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;We increment the &lt;strong&gt;patch version&lt;/strong&gt; with any backwards-compatible bug fixes.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Preview functionality may take the form of entire methods or simply additional data returned from an otherwise non-preview method. Refer to the GitHub API documentation for details on preview functionality.&lt;/p&gt; 
&lt;h3&gt;Calendar Versioning&lt;/h3&gt; 
&lt;p&gt;As of 2022-11-28, GitHub &lt;a href=&quot;https://github.blog/developer-skills/github/to-infinity-and-beyond-enabling-the-future-of-githubs-rest-api-with-api-versioning/&quot;&gt;has announced&lt;/a&gt; that they are starting to version their v3 API based on &quot;calendar-versioning&quot;.&lt;/p&gt; 
&lt;p&gt;In practice, our goal is to make per-method version overrides (at least in the core library) rare and temporary.&lt;/p&gt; 
&lt;p&gt;Our understanding of the GitHub docs is that they will be revving the entire API to each new date-based version, even if only a few methods have breaking changes. Other methods will accept the new version with their existing functionality. So when a new date-based version of the GitHub API is released, we (the repo maintainers) plan to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;update each method that had breaking changes, overriding their per-method API version header. This may happen in one or multiple commits and PRs, and is all done in the main branch.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;once all of the methods with breaking changes have been updated, have a final commit that bumps the default API version, and remove all of the per-method overrides. That would now get a major version bump when the next go-github release is made.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Version Compatibility Table&lt;/h3&gt; 
&lt;p&gt;The following table identifies which version of the GitHub API is supported by this (and past) versions of this repo (go-github). Versions prior to 48.2.0 are not listed.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;go-github Version&lt;/th&gt; 
   &lt;th&gt;GitHub v3 API Version&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;91.0.0&lt;/td&gt; 
   &lt;td&gt;2022-11-28&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;...&lt;/td&gt; 
   &lt;td&gt;2022-11-28&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;48.2.0&lt;/td&gt; 
   &lt;td&gt;2022-11-28&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This library is distributed under the BSD-style license found in the &lt;a href=&quot;https://raw.githubusercontent.com/google/go-github/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/65f9ed94be427c5c209351dd8b066d50ef3293876061f62b5052973e2d4ba8d1/google/go-github" medium="image" />
      
    </item>
    
    <item>
      <title>moby/moby</title>
      <link>https://github.com/moby/moby</link>
      <description>&lt;p&gt;The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://mobyproject.org/&quot;&gt;https://mobyproject.org/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;The Moby Project&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://pkg.go.dev/github.com/moby/moby/v2&quot;&gt;&lt;img src=&quot;https://pkg.go.dev/badge/github.com/moby/moby/v2&quot; alt=&quot;PkgGoDev&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/license/moby/moby&quot; alt=&quot;GitHub License&quot; /&gt; &lt;a href=&quot;https://scorecard.dev/viewer/?uri=github.com/moby/moby&quot;&gt;&lt;img src=&quot;https://api.scorecard.dev/projects/github.com/moby/moby/badge&quot; alt=&quot;OpenSSF Scorecard&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.bestpractices.dev/projects/10989&quot;&gt;&lt;img src=&quot;https://www.bestpractices.dev/projects/10989/badge&quot; alt=&quot;OpenSSF Best Practices&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/moby/moby/master/docs/static_files/moby-project-logo.png&quot; alt=&quot;Moby Project logo&quot; title=&quot;The Moby Project&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Moby is an open-source project created by Docker to enable and accelerate software containerization.&lt;/p&gt; 
&lt;p&gt;It provides a &quot;Lego set&quot; of toolkit components, the framework for assembling them into custom container-based systems, and a place for all container enthusiasts and professionals to experiment and exchange ideas. Components include container build tools, a container registry, orchestration tools, a runtime and more, and these can be used as building blocks in conjunction with other tools and projects.&lt;/p&gt; 
&lt;h2&gt;Principles&lt;/h2&gt; 
&lt;p&gt;Moby is an open project guided by strong principles, aiming to be modular, flexible and without too strong an opinion on user experience. It is open to the community to help set its direction.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Modular: the project includes lots of components that have well-defined functions and APIs that work together.&lt;/li&gt; 
 &lt;li&gt;Batteries included but swappable: Moby includes enough components to build fully featured container systems, but its modular architecture ensures that most of the components can be swapped by different implementations.&lt;/li&gt; 
 &lt;li&gt;Usable security: Moby provides secure defaults without compromising usability.&lt;/li&gt; 
 &lt;li&gt;Developer focused: The APIs are intended to be functional and useful to build powerful tools. They are not necessarily intended as end user tools but as components aimed at developers. Documentation and UX is aimed at developers not end users.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Audience&lt;/h2&gt; 
&lt;p&gt;The Moby Project is intended for engineers, integrators and enthusiasts looking to modify, hack, fix, experiment, invent and build systems based on containers. It is not for people looking for a commercially supported system, but for people who want to work and learn with open source code.&lt;/p&gt; 
&lt;h2&gt;Relationship with Docker&lt;/h2&gt; 
&lt;p&gt;The components and tools in the Moby Project are initially the open source components that Docker and the community have built for the Docker Project. New projects can be added if they fit with the community goals. Docker is committed to using Moby as the upstream for the Docker Product. However, other projects are also encouraged to use Moby as an upstream, and to reuse the components in diverse ways, and all these uses will be treated in the same way. External maintainers and contributors are welcomed.&lt;/p&gt; 
&lt;p&gt;The Moby project is not intended as a location for support or feature requests for Docker products, but as a place for contributors to work on open source code, fix bugs, and make the code more useful. The releases are supported by the maintainers, community and users, on a best efforts basis only. For customers who want enterprise or commercial support, &lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;Docker Desktop&lt;/a&gt; and &lt;a href=&quot;https://www.mirantis.com/software/mirantis-container-runtime/&quot;&gt;Mirantis Container Runtime&lt;/a&gt; are the appropriate products for these use cases.&lt;/p&gt; 
&lt;h2&gt;Go modules&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;Starting with Docker v29 (released November 2025), the Go module &lt;code&gt;github.com/docker/docker&lt;/code&gt; is &lt;strong&gt;deprecated&lt;/strong&gt; and won&#39;t be updated.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;The supported public Go modules are:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Module&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moby/moby/master/client/&quot;&gt;&lt;code&gt;github.com/moby/moby/client&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Go client for the Docker Engine API&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/moby/moby/master/api/&quot;&gt;&lt;code&gt;github.com/moby/moby/api&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;API types shared between client and server&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The root module &lt;code&gt;github.com/moby/moby/v2&lt;/code&gt; is the codebase for building container engines based on Moby (such as Docker Engine). It produces binaries only - it is &lt;strong&gt;not intended to be imported as a Go library&lt;/strong&gt; and has no API stability guarantees.&lt;/p&gt; 
&lt;h3&gt;Release tags&lt;/h3&gt; 
&lt;p&gt;Docker Engine releases are tagged with a &lt;strong&gt;&lt;code&gt;docker-&lt;/code&gt;&lt;/strong&gt; prefix (e.g. &lt;code&gt;docker-v29.0.0&lt;/code&gt; for Docker Engine 29.0.0).&lt;/p&gt; 
&lt;p&gt;These tags are only used to build the Docker Engine binary from the root module - they must not be consumed via &lt;code&gt;go get&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;client&lt;/code&gt; and &lt;code&gt;api&lt;/code&gt; modules are versioned independently with their own tags (e.g. &lt;code&gt;client/v1.x.x&lt;/code&gt;, &lt;code&gt;api/v1.x.x&lt;/code&gt;).&lt;/p&gt; 
&lt;h3&gt;Migrating from &lt;code&gt;github.com/docker/docker&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;Replace the old import paths:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-diff&quot;&gt;- import &quot;github.com/docker/docker/client&quot;
+ import &quot;github.com/moby/moby/client&quot;

- import &quot;github.com/docker/docker/api/types&quot;
+ import &quot;github.com/moby/moby/api/types&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note that v29 includes many breaking API changes (option structs, renamed methods, moved types). See the &lt;a href=&quot;https://github.com/moby/moby/releases/tag/docker-v29.0.0&quot;&gt;v29.0.0 release notes&lt;/a&gt; for the full list of Go SDK changes.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h1&gt;Legal&lt;/h1&gt; 
&lt;p&gt;&lt;em&gt;Brought to you courtesy of our legal counsel. For more context, please see the &lt;a href=&quot;https://github.com/moby/moby/raw/master/NOTICE&quot;&gt;NOTICE&lt;/a&gt; document in this repo.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;Use and transfer of Moby may be subject to certain restrictions by the United States and other governments.&lt;/p&gt; 
&lt;p&gt;It is your responsibility to ensure that your use and/or transfer does not violate applicable laws.&lt;/p&gt; 
&lt;p&gt;For more information, please see &lt;a href=&quot;https://www.bis.doc.gov&quot;&gt;https://www.bis.doc.gov&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Licensing&lt;/h1&gt; 
&lt;p&gt;Moby is licensed under the Apache License, Version 2.0. See &lt;a href=&quot;https://github.com/moby/moby/raw/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt; for the full license text.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/a4a9ff3bb9b46b491e9f08c314595bb445ead2cbdf8e71376dc11ab7fb8ba68a/moby/moby" medium="image" />
      
    </item>
    
    <item>
      <title>XTLS/Xray-core</title>
      <link>https://github.com/XTLS/Xray-core</link>
      <description>&lt;p&gt;Xray, Penetrates Everything. Also the best v2ray-core. Where the magic happens. An open platform for various uses.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://t.me/projectXray&quot;&gt;https://t.me/projectXray&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Project X&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/XTLS&quot;&gt;Project X&lt;/a&gt; originates from XTLS protocol, providing a set of network tools such as &lt;a href=&quot;https://github.com/XTLS/Xray-core&quot;&gt;Xray-core&lt;/a&gt; and &lt;a href=&quot;https://github.com/XTLS/REALITY&quot;&gt;REALITY&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-core#readme&quot;&gt;README&lt;/a&gt; is open, so feel free to submit your project &lt;a href=&quot;https://github.com/XTLS/Xray-core/pulls&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Sponsors&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.rw&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/a22d34ae-01ee-441c-843a-85356748ed1e&quot; alt=&quot;Remnawave&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://happ.su&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/14055dab-e8bb-48bd-89e8-962709e4098e&quot; alt=&quot;Happ&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://blanc.link/VMTSDqW&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/9145ea7d-5da3-446e-8143-710dba4292c3&quot; alt=&quot;BlancVPN&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-core/issues/3668&quot;&gt;&lt;strong&gt;Sponsor Xray-core&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Donation &amp;amp; NFTs&lt;/h2&gt; 
&lt;h3&gt;&lt;a href=&quot;https://opensea.io/item/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/1&quot;&gt;Collect a Project X NFT to support the development of Project X!&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://opensea.io/item/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/1&quot;&gt;&lt;img alt=&quot;Project X NFT&quot; width=&quot;150px&quot; src=&quot;https://raw2.seadn.io/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/7fa9ce900fb39b44226348db330e32/8b7fa9ce900fb39b44226348db330e32.svg?sanitize=true&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;TRX(Tron)/USDT/USDC: &lt;code&gt;TNrDh5VSfwd4RPrwsohr6poyNTfFefNYan&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;TON: &lt;code&gt;UQApeV-u2gm43aC1uP76xAC1m6vCylstaN1gpfBmre_5IyTH&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;BTC: &lt;code&gt;1JpqcziZZuqv3QQJhZGNGBVdCBrGgkL6cT&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;XMR: &lt;code&gt;4ABHQZ3yJZkBnLoqiKvb3f8eqUnX4iMPb6wdant5ZLGQELctcerceSGEfJnoCk6nnyRZm73wrwSgvZ2WmjYLng6R7sR67nq&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;SOL/USDT/USDC: &lt;code&gt;3x5NuXHzB5APG6vRinPZcsUv5ukWUY1tBGRSJiEJWtZa&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;ETH/USDT/USDC: &lt;code&gt;0xDc3Fe44F0f25D13CACb1C4896CD0D321df3146Ee&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Project X NFT: &lt;a href=&quot;https://opensea.io/item/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/1&quot;&gt;https://opensea.io/item/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/1&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;VLESS NFT: &lt;a href=&quot;https://opensea.io/collection/vless&quot;&gt;https://opensea.io/collection/vless&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;REALITY NFT: &lt;a href=&quot;https://opensea.io/item/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/2&quot;&gt;https://opensea.io/item/ethereum/0x5ee362866001613093361eb8569d59c4141b76d1/2&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Related links: &lt;a href=&quot;https://github.com/XTLS/Xray-core/pull/5067&quot;&gt;VLESS Post-Quantum Encryption&lt;/a&gt;, &lt;a href=&quot;https://github.com/XTLS/Xray-core/discussions/4113&quot;&gt;XHTTP: Beyond REALITY&lt;/a&gt;, &lt;a href=&quot;https://github.com/XTLS/Xray-core/discussions/3633&quot;&gt;Announcement of NFTs by Project X&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-core/raw/main/LICENSE&quot;&gt;Mozilla Public License Version 2.0&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://xtls.github.io&quot;&gt;Project X Official Website&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Telegram&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://t.me/projectXray&quot;&gt;Project X&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://t.me/projectXtls&quot;&gt;Project X Channel&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://t.me/projectVless&quot;&gt;Project VLESS&lt;/a&gt; (Русский)&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://t.me/projectXhttp&quot;&gt;Project XHTTP&lt;/a&gt; (Persian)&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Linux Script 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-install&quot;&gt;XTLS/Xray-install&lt;/a&gt; (&lt;strong&gt;Official&lt;/strong&gt;)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/team-cloudchaser/tempest&quot;&gt;tempest&lt;/a&gt; (supports &lt;a href=&quot;https://systemd.io&quot;&gt;&lt;code&gt;systemd&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/OpenRC/openrc&quot;&gt;OpenRC&lt;/a&gt;; Linux-only)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Docker 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://ghcr.io/xtls/xray-core&quot;&gt;ghcr.io/xtls/xray-core&lt;/a&gt; (&lt;strong&gt;Official&lt;/strong&gt;)&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://hub.docker.com/r/teddysun/xray&quot;&gt;teddysun/xray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/wulabing/xray_docker&quot;&gt;wulabing/xray_docker&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Web Panel 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/remnawave/panel&quot;&gt;Remnawave&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/MHSanaei/3x-ui&quot;&gt;3X-UI&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/PasarGuard/panel&quot;&gt;PasarGuard&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/qist/xray-ui&quot;&gt;Xray-UI&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/xeefei/X-Panel&quot;&gt;X-Panel&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/Gozargah/Marzban&quot;&gt;Marzban&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/hiddify/Hiddify-Manager&quot;&gt;Hiddify&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/AghayeCoder/tx-ui&quot;&gt;TX-UI&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/ClickDevTech/CELERITY-panel&quot;&gt;CELERITY&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;One Click 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/zxcvos/Xray-script&quot;&gt;Xray-REALITY&lt;/a&gt;, &lt;a href=&quot;https://github.com/sajjaddg/xray-reality&quot;&gt;xray-reality&lt;/a&gt;, &lt;a href=&quot;https://github.com/aleskxyz/reality-ezpz&quot;&gt;reality-ezpz&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/hello-yunshu/Xray_bash_onekey&quot;&gt;Xray_bash_onekey&lt;/a&gt;, &lt;a href=&quot;https://github.com/LordPenguin666/XTool&quot;&gt;XTool&lt;/a&gt;, &lt;a href=&quot;https://github.com/vpainless/vpainless&quot;&gt;VPainLess&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/mack-a/v2ray-agent&quot;&gt;v2ray-agent&lt;/a&gt;, &lt;a href=&quot;https://github.com/wulabing/Xray_onekey&quot;&gt;Xray_onekey&lt;/a&gt;, &lt;a href=&quot;https://github.com/proxysu/ProxySU&quot;&gt;ProxySU&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Magisk 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/vincentng295/Magic_V2Ray&quot;&gt;Magic_V2Ray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/E7KMbb/Xray_For_Magisk&quot;&gt;Xray_For_Magisk&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Homebrew 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;brew install xray&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Example 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XTLS/REALITY#readme&quot;&gt;VLESS-XTLS-uTLS-REALITY&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-examples/tree/main/VLESS-TCP-XTLS-Vision&quot;&gt;VLESS-TCP-XTLS-Vision&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-examples/tree/main/All-in-One-fallbacks-Nginx&quot;&gt;All-in-One-fallbacks-Nginx&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Xray-examples 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-examples&quot;&gt;XTLS/Xray-examples&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/chika0801/Xray-examples&quot;&gt;chika0801/Xray-examples&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/lxhao61/integrated-examples&quot;&gt;lxhao61/integrated-examples&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Tutorial 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/chika0801/Xray-install&quot;&gt;XTLS Vision&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://cscot.pages.dev/2023/03/02/Xray-REALITY-tutorial/&quot;&gt;REALITY (English)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/SasukeFreestyle/XTLS-Iran-Reality&quot;&gt;XTLS-Iran-Reality (English)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://computerscot.github.io/vless-xtls-utls-reality-steal-oneself.html&quot;&gt;Xray REALITY with &#39;steal oneself&#39; (English)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://g800.pages.dev/wireguard&quot;&gt;Xray with WireGuard inbound (English)&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;GUI Clients&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;OpenWrt 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/Openwrt-Passwall/openwrt-passwall&quot;&gt;PassWall&lt;/a&gt;, &lt;a href=&quot;https://github.com/Openwrt-Passwall/openwrt-passwall2&quot;&gt;PassWall 2&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/fw876/helloworld&quot;&gt;ShadowSocksR Plus+&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/yichya/luci-app-xray&quot;&gt;luci-app-xray&lt;/a&gt; (&lt;a href=&quot;https://github.com/yichya/openwrt-xray&quot;&gt;openwrt-xray&lt;/a&gt;)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Asuswrt-Merlin 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/DanielLavrushin/asuswrt-merlin-xrayui&quot;&gt;XRAYUI&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/hq450/fancyss&quot;&gt;fancyss&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Windows 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/2dust/v2rayN&quot;&gt;v2rayN&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/LorenEteval/Furious&quot;&gt;Furious&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/InvisibleManVPN/InvisibleMan-XRayClient&quot;&gt;Invisible Man - Xray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/AnyPortal/AnyPortal&quot;&gt;AnyPortal&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/genyleap/GenyConnect&quot;&gt;GenyConnect&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/OneXray/OneXray&quot;&gt;OneXray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/PhoenixNil/XrayUI-dev&quot;&gt;XrayUI-dev&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Android 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/2dust/v2rayNG&quot;&gt;v2rayNG&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XTLS/X-flutter&quot;&gt;X-flutter&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/SaeedDev94/Xray&quot;&gt;SaeedDev94/Xray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/lhear/SimpleXray&quot;&gt;SimpleXray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/Q7DF1/XrayFA&quot;&gt;XrayFA&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/AnyPortal/AnyPortal&quot;&gt;AnyPortal&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/OneXray/OneXray&quot;&gt;OneXray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/Asterisk4Magisk/AsteriskNG&quot;&gt;AsteriskNG&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;iOS &amp;amp; macOS arm64 &amp;amp; tvOS 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/app/happ-proxy-utility/id6504287215&quot;&gt;Happ&lt;/a&gt; | &lt;a href=&quot;https://apps.apple.com/ru/app/happ-proxy-utility-plus/id6746188973&quot;&gt;Happ RU&lt;/a&gt; | &lt;a href=&quot;https://apps.apple.com/us/app/happ-proxy-utility-for-tv/id6748297274&quot;&gt;Happ tvOS&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/app/streisand/id6450534064&quot;&gt;Streisand&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/OneXray/OneXray&quot;&gt;OneXray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/en/app/incy/id6756943388&quot;&gt;INCY&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;macOS arm64 &amp;amp; x64 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/app/happ-proxy-utility/id6504287215&quot;&gt;Happ&lt;/a&gt; | &lt;a href=&quot;https://apps.apple.com/ru/app/happ-proxy-utility-plus/id6746188973&quot;&gt;Happ RU&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/yanue/V2rayU&quot;&gt;V2rayU&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/tzmax/V2RayXS&quot;&gt;V2RayXS&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/LorenEteval/Furious&quot;&gt;Furious&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/OneXray/OneXray&quot;&gt;OneXray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/goxray/desktop&quot;&gt;GoXRay&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/AnyPortal/AnyPortal&quot;&gt;AnyPortal&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/2dust/v2rayN&quot;&gt;v2rayN&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/genyleap/GenyConnect&quot;&gt;GenyConnect&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/en/app/incy/id6756943388&quot;&gt;INCY&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Linux 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/v2rayA/v2rayA&quot;&gt;v2rayA&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/LorenEteval/Furious&quot;&gt;Furious&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/ketetefid/GorzRay&quot;&gt;GorzRay&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/goxray/desktop&quot;&gt;GoXRay&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/AnyPortal/AnyPortal&quot;&gt;AnyPortal&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/2dust/v2rayN&quot;&gt;v2rayN&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/genyleap/GenyConnect&quot;&gt;GenyConnect&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/OneXray/OneXray&quot;&gt;OneXray&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;HarmonyOS 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/popsiclelmlm/Hey&quot;&gt;Hey&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Others that support VLESS, XTLS, REALITY, XUDP, PLUX...&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;iOS &amp;amp; macOS arm64 &amp;amp; tvOS 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/NodePassProject/Anywhere&quot;&gt;Anywhere&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/app/shadowrocket/id932747118&quot;&gt;Shadowrocket&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/us/app/loon/id1373567447&quot;&gt;Loon&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/us/app/egern/id1616105820&quot;&gt;Egern&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://apps.apple.com/us/app/quantumult-x/id1443988620&quot;&gt;Quantumult X&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Xray Tools 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/lilendian0x00/xray-knife&quot;&gt;xray-knife&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/kutovoys/xray-checker&quot;&gt;xray-checker&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Xray Wrapper 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XTLS/libXray&quot;&gt;XTLS/libXray&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/remnawave/xtls-sdk&quot;&gt;xtls-sdk&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/hiddify/xtlsapi&quot;&gt;xtlsapi&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/2dust/AndroidLibXrayLite&quot;&gt;AndroidLibXrayLite&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XIIIFOX/flutter_vless&quot;&gt;flutter_vless&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/LorenEteval/Xray-core-python&quot;&gt;Xray-core-python&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XVGuardian/xray-api&quot;&gt;xray-api&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/XrayR-project/XrayR&quot;&gt;XrayR&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/XrayR-project/XrayR-release&quot;&gt;XrayR-release&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/missuo/XrayR-V2Board&quot;&gt;XrayR-V2Board&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Cores 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/amnezia-vpn&quot;&gt;Amnezia VPN&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/MetaCubeX/mihomo&quot;&gt;mihomo&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/SagerNet/sing-box&quot;&gt;sing-box&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-core/raw/main/CODE_OF_CONDUCT.md&quot;&gt;Code of Conduct&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://deepwiki.com/XTLS/Xray-core&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-core/releases/tag/v1.0.0&quot;&gt;Xray-core v1.0.0&lt;/a&gt; was forked from &lt;a href=&quot;https://github.com/v2fly/v2ray-core/commit/9a03cc5c98d04cc28320fcee26dbc236b3291256&quot;&gt;v2fly-core 9a03cc5&lt;/a&gt;, and we have made &amp;amp; accumulated a huge number of enhancements over time, check &lt;a href=&quot;https://github.com/XTLS/Xray-core/releases&quot;&gt;the release notes for each version&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;For third-party projects used in &lt;a href=&quot;https://github.com/XTLS/Xray-core&quot;&gt;Xray-core&lt;/a&gt;, check your local or &lt;a href=&quot;https://github.com/XTLS/Xray-core/raw/main/go.mod&quot;&gt;the latest go.mod&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Bundled Third-Party Components Redistribution&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Certain optional features dynamically load third-party components. These optional components are separate works distributed under their own licenses, and are bundled into the ZIP package for ease of use. Users may replace these components under the licenses from these components.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;These components include:&lt;/p&gt; 
&lt;h4&gt;Wintun&lt;/h4&gt; 
&lt;p&gt;This distribution contains unmodified official precompiled and pre-signed Wintun binaries.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Project: Wintun&lt;/li&gt; 
 &lt;li&gt;Copyright: Copyright (C) 2018-2021 WireGuard LLC. All Rights Reserved.&lt;/li&gt; 
 &lt;li&gt;Redistribution License: Prebuilt Binaries License (PBL) bundled with official precompiled and pre-signed binaries from &lt;a href=&quot;http://wintun.net&quot;&gt;wintun.net&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Component(s): wintun.dll&lt;/li&gt; 
 &lt;li&gt;Source: &lt;a href=&quot;https://www.wintun.net/&quot;&gt;https://www.wintun.net/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Included in: 
  &lt;ul&gt; 
   &lt;li&gt;Windows x86 (windows-32, win7-32)&lt;/li&gt; 
   &lt;li&gt;Windows x86-64 (windows-64, win7-64)&lt;/li&gt; 
   &lt;li&gt;Windows AArch64 (windows-arm64)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Notes: Wintun is an optional runtime-loaded component only used for TUN inbound functionality on supported Windows platforms.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;One-line Compilation&lt;/h2&gt; 
&lt;h3&gt;Windows (PowerShell)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;$env:CGO_ENABLED=0
go build -o xray.exe -trimpath -buildvcs=false -ldflags=&quot;-s -w -buildid=&quot; -v ./main
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Linux / macOS&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -ldflags=&quot;-s -w -buildid=&quot; -v ./main
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Reproducible Releases&lt;/h3&gt; 
&lt;p&gt;Make sure that you are using the same Go version, and remember to set the git commit id (7 bytes):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -gcflags=&quot;all=-l=4&quot; -ldflags=&quot;-X github.com/xtls/xray-core/core.build=REPLACE -s -w -buildid=&quot; -v ./main
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For Android:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GOOS=android GOARCH=arm64 CGO_ENABLED=1 CC=/path/to/aarch64-linux-android24-clang go build -o xray -trimpath -buildvcs=false -gcflags=&quot;all=-l=4&quot; -ldflags=&quot;-X github.com/xtls/xray-core/core.build=REPLACE -s -w -buildid= -checklinkname=0&quot; -v ./main
GOOS=android GOARCH=amd64 CGO_ENABLED=1 CC=/path/to/x86_64-linux-android24-clang go build -o xray -trimpath -buildvcs=false -gcflags=&quot;all=-l=4&quot; -ldflags=&quot;-X github.com/xtls/xray-core/core.build=REPLACE -s -w -buildid= -checklinkname=0&quot; -v ./main
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you are compiling a 32-bit MIPS/MIPSLE target, use this command instead:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -gcflags=&quot;-l=4&quot; -ldflags=&quot;-X github.com/xtls/xray-core/core.build=REPLACE -s -w -buildid=&quot; -v ./main
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Stargazers over time&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://starchart.cc/XTLS/Xray-core&quot;&gt;&lt;img src=&quot;https://starchart.cc/XTLS/Xray-core.svg?sanitize=true&quot; alt=&quot;Stargazers over time&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/48f095dca060ebb75356a97472ac9949b860545da732606b0819df5f7a2d9d7c/XTLS/Xray-core" medium="image" />
      
    </item>
    
    <item>
      <title>open-telemetry/opentelemetry-collector</title>
      <link>https://github.com/open-telemetry/opentelemetry-collector</link>
      <description>&lt;p&gt;OpenTelemetry Collector&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://opentelemetry.io&quot;&gt;https://opentelemetry.io&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;hr /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt; &lt;a href=&quot;https://opentelemetry.io/docs/collector/getting-started/&quot;&gt;Getting Started&lt;/a&gt; &amp;nbsp;&amp;nbsp;•&amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/CONTRIBUTING.md&quot;&gt;Getting Involved&lt;/a&gt; &amp;nbsp;&amp;nbsp;•&amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://cloud-native.slack.com/archives/C01N6P7KR6W&quot;&gt;Getting In Touch&lt;/a&gt; &lt;/strong&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/open-telemetry/opentelemetry-collector/actions/workflows/build-and-test.yml?query=branch%3Amain&quot;&gt; &lt;img alt=&quot;Build Status&quot; src=&quot;https://img.shields.io/github/actions/workflow/status/open-telemetry/opentelemetry-collector/build-and-test.yml?branch=main&amp;amp;style=for-the-badge&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/open-telemetry/opentelemetry-collector/branch/main/&quot;&gt; &lt;img alt=&quot;Codecov Status&quot; src=&quot;https://img.shields.io/codecov/c/github/open-telemetry/opentelemetry-collector?style=for-the-badge&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://github.com/open-telemetry/opentelemetry-collector/releases&quot;&gt; &lt;img alt=&quot;GitHub release (latest by date including pre-releases)&quot; src=&quot;https://img.shields.io/github/v/release/open-telemetry/opentelemetry-collector?include_prereleases&amp;amp;style=for-the-badge&quot; /&gt; &lt;/a&gt; &lt;br /&gt; &lt;a href=&quot;https://www.bestpractices.dev/projects/8404&quot;&gt;&lt;img src=&quot;https://www.bestpractices.dev/projects/8404/badge&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&amp;amp;can=1&amp;amp;q=proj:opentelemetry&quot;&gt; &lt;img alt=&quot;Fuzzing Status&quot; src=&quot;https://oss-fuzz-build-logs.storage.googleapis.com/badges/opentelemetry.svg?sanitize=true&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt; &lt;a href=&quot;https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/docs/vision.md&quot;&gt;Vision&lt;/a&gt; &amp;nbsp;&amp;nbsp;•&amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://opentelemetry.io/docs/collector/configuration/&quot;&gt;Configuration&lt;/a&gt; &amp;nbsp;&amp;nbsp;•&amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://opentelemetry.io/docs/collector/internal-telemetry/#use-internal-telemetry-to-monitor-the-collector&quot;&gt;Monitoring&lt;/a&gt; &amp;nbsp;&amp;nbsp;•&amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/docs/security-best-practices.md&quot;&gt;Security&lt;/a&gt; &amp;nbsp;&amp;nbsp;•&amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://pkg.go.dev/go.opentelemetry.io/collector&quot;&gt;Package&lt;/a&gt; &lt;/strong&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h1&gt;&lt;img src=&quot;https://opentelemetry.io/img/logos/opentelemetry-logo-nav.png&quot; alt=&quot;OpenTelemetry Icon&quot; width=&quot;45&quot; height=&quot;&quot; /&gt; OpenTelemetry Collector&lt;/h1&gt; 
&lt;p&gt;The OpenTelemetry Collector offers a vendor-agnostic implementation on how to receive, process and export telemetry data. In addition, it removes the need to run, operate and maintain multiple agents/collectors in order to support open-source telemetry data formats (e.g. Jaeger, Prometheus, etc.) to multiple open-source or commercial back-ends.&lt;/p&gt; 
&lt;p&gt;Objectives:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Usable: Reasonable default configuration, supports popular protocols, runs and collects out of the box.&lt;/li&gt; 
 &lt;li&gt;Performant: Highly stable and performant under varying loads and configurations.&lt;/li&gt; 
 &lt;li&gt;Observable: An exemplar of an observable service.&lt;/li&gt; 
 &lt;li&gt;Extensible: Customizable without touching the core code.&lt;/li&gt; 
 &lt;li&gt;Unified: Single codebase, deployable as an agent or collector with support for traces, metrics and logs.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;p&gt;The OpenTelemetry Collector SIG is present at the &lt;a href=&quot;https://cloud-native.slack.com/archives/C01N6P7KR6W&quot;&gt;#otel-collector&lt;/a&gt; channel on the CNCF Slack and &lt;a href=&quot;https://github.com/open-telemetry/community#implementation-sigs&quot;&gt;meets once a week&lt;/a&gt; via video calls. If you are new to the CNCF Slack community, you can &lt;a href=&quot;https://slack.cncf.io/&quot;&gt;create an account&lt;/a&gt;. Everyone is invited to join those calls, which typically serves the following purposes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;meet the humans behind the project&lt;/li&gt; 
 &lt;li&gt;get an opinion about specific proposals&lt;/li&gt; 
 &lt;li&gt;look for a sponsor for a proposed component after trying already via GitHub and Slack&lt;/li&gt; 
 &lt;li&gt;get attention to a specific pull-request that got stuck and is difficult to discuss asynchronously&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;We rotate our video calls between three time slots, in order to allow everyone to join at least once every three meetings. The rotation order is as follows:&lt;/p&gt; 
&lt;p&gt;Tuesday:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dateful.com/convert/pst-pdt-pacific-time?t=1700&quot;&gt;17:00 PT&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Wednesday:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dateful.com/convert/pst-pdt-pacific-time?t=0900&quot;&gt;09:00 PT&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://dateful.com/convert/pst-pdt-pacific-time?t=0500&quot;&gt;05:00 PT&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Contributors to the project are also welcome to have ad-hoc meetings for synchronous discussions about specific points. Post a note in #otel-collector-dev on Slack inviting others, specifying the topic to be discussed. Unless there are strong reasons to keep the meeting private, please make it an open invitation for other contributors to join. Try also to identify who would be the other contributors interested on that topic and in which timezones they are.&lt;/p&gt; 
&lt;p&gt;Remember that our source of truth is GitHub: every decision made via Slack or video calls has to be recorded in the relevant GitHub issue. Ideally, the agenda items from the meeting notes would include a link to the issue or pull request where a discussion is happening already. We acknowledge that not everyone can join Slack or the synchronous calls and don&#39;t want them to feel excluded.&lt;/p&gt; 
&lt;h2&gt;Supported OTLP version&lt;/h2&gt; 
&lt;p&gt;This code base is currently built against using OTLP protocol v1.10.0, considered Stable. &lt;a href=&quot;https://github.com/open-telemetry/opentelemetry-proto?tab=readme-ov-file#stability-definition&quot;&gt;See the OpenTelemetry Protocol Stability definition here.&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Stability levels&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/docs/component-stability.md&quot;&gt;Stability Levels and versioning&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;Compatibility&lt;/h2&gt; 
&lt;p&gt;When used as a library, the OpenTelemetry Collector attempts to track the currently supported Go minor versions, as &lt;a href=&quot;https://go.dev/doc/devel/release#policy&quot;&gt;defined by the Go team&lt;/a&gt;. Removing support for an unsupported Go version is not considered a breaking change.&lt;/p&gt; 
&lt;p&gt;Support for Go versions on the OpenTelemetry Collector is updated as follows:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;The first release after the release of a new Go minor version &lt;code&gt;N&lt;/code&gt; will add build and tests steps for the new Go minor version.&lt;/li&gt; 
 &lt;li&gt;The first release after the release of a new Go minor version &lt;code&gt;N&lt;/code&gt; will remove support for Go version &lt;code&gt;N-2&lt;/code&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Within supported Go minor versions, the minimum supported patch version may increase over time, for example to accommodate dependency updates. Increasing the minimum supported patch version within a supported Go minor version is not considered a breaking change.&lt;/p&gt; 
&lt;p&gt;Official OpenTelemetry Collector distro binaries will be built with a release in the latest Go minor version series.&lt;/p&gt; 
&lt;h2&gt;Verifying the images signatures&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;To verify a signed artifact or blob, first &lt;a href=&quot;https://docs.sigstore.dev/cosign/system_config/installation/&quot;&gt;install Cosign&lt;/a&gt;, then follow the instructions below.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;We are signing the images &lt;code&gt;otel/opentelemetry-collector&lt;/code&gt; and &lt;code&gt;otel/opentelemetry-collector-contrib&lt;/code&gt; using &lt;a href=&quot;https://github.com/sigstore/cosign&quot;&gt;sigstore cosign&lt;/a&gt; tool and to verify the signatures you can run the following command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ cosign verify \
  --certificate-identity=https://github.com/open-telemetry/opentelemetry-collector-releases/.github/workflows/base-release.yaml@refs/tags/&amp;lt;RELEASE_TAG&amp;gt; \
  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \
  &amp;lt;OTEL_COLLECTOR_IMAGE&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;where:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;RELEASE_TAG&amp;gt;&lt;/code&gt;: is the release that you want to validate&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;OTEL_COLLECTOR_IMAGE&amp;gt;&lt;/code&gt;: is the image that you want to check&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ cosign verify --certificate-identity=https://github.com/open-telemetry/opentelemetry-collector-releases/.github/workflows/base-release.yaml@refs/tags/v0.98.0 --certificate-oidc-issuer=https://token.actions.githubusercontent.com ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.98.0

Verification for ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.98.0 --
The following checks were performed on each of these signatures:
  - The cosign claims were validated
  - Existence of the claims in the transparency log was verified offline
  - The code-signing certificate was verified using trusted certificate authority certificates

[{&quot;critical&quot;:{&quot;identity&quot;:{&quot;docker-reference&quot;:&quot;ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib&quot;},&quot;image&quot;:{&quot;docker-manifest-digest&quot;:&quot;sha256:5cea85bcbc734a3c0a641368e5a4ea9d31b472997e9f2feca57eeb4a147fcf1a&quot;},&quot;type&quot;:&quot;cosign container image signature&quot;},&quot;optional&quot;:{&quot;1.3.6.1.4.1.57264.1.1&quot;:&quot;https://token.actions.githubusercontent.com&quot;,&quot;1.3.6.1.4.1.57264.1.2&quot;:&quot;push&quot;,&quot;1.3.6.1.4.1.57264.1.3&quot;:&quot;9e20bf5c142e53070ccb8320a20315fffb41469e&quot;,&quot;1.3.6.1.4.1.57264.1.4&quot;:&quot;Release Contrib&quot;,&quot;1.3.6.1.4.1.57264.1.5&quot;:&quot;open-telemetry/opentelemetry-collector-releases&quot;,&quot;1.3.6.1.4.1.57264.1.6&quot;:&quot;refs/tags/v0.98.0&quot;,&quot;Bundle&quot;:{&quot;SignedEntryTimestamp&quot;:&quot;MEUCIQDdlmNeKXQrHnonwWiHLhLLwFDVDNoOBCn2sv85J9P8mgIgDQFssWJImo1hn38VlojvSCL7Qq5FMmtnGu0oLsNdOm8=&quot;,&quot;Payload&quot;:{&quot;body&quot;:&quot;eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIxMzVjY2RlN2YzZTNhYjU2NmFmYzJhYWU3MDljYmJlNmFhMDZlZWMzNDA2MWNkZjMyNmRhYzM2MmY0NWM4Yjg4In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUURFbDV6N0diMWRVYkM5KzR4c1VvbDhMcWZNV2hiTzhkdEpwdExyMXhUNWZnSWdTdEwwN1I0ZDA5R2x0ZkV0azJVbmlJSlJhQVdrVDJNWDVtRXJNSlplc2pRPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaG9ha05EUW5jeVowRjNTVUpCWjBsVlNETkNjRFZTYlVSU1VpOXphMWg0YVdWUFlrcFhSbmRrUjNNNGQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFJkMDVFUlhoTlJGRjRUMFJOTlZkb1kwNU5hbEYzVGtSRmVFMUVVWGxQUkUwMVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZyWlRsSE1ubHNjMjkzYVZZMmRFOVZSazlRVVhNd2NXY3hTSEV5WmpsVUx6UTJZbEFLU1ZSNE0ybFRkVXBhV0hGc1dEUldWV2Q1VlZndmNVazJhblZ2WlZSVEswaG5XVUoyYjBseVNERTFUeTltZEd0VmVtRlBRMEpwZDNkbloxbHZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZHTkRrMUNrdDFNRWhqTm5rek1rNUNTVTFFU21ReVpuWkxNMHBCZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJkWldVZEJNVlZrUlZGRlFpOTNVamhOU0hGSFpVZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZtbE1iVTUyWWxNNWRtTkhWblZNV0ZKc1lrZFdkQXBhV0ZKNVpWTTVkbU5IVm5Wa1IxWnpXbGN4YkdSSVNqVk1WMDUyWWtkNGJGa3pVblpqYVRGNVdsZDRiRmxZVG14amVUaDFXakpzTUdGSVZtbE1NMlIyQ21OdGRHMWlSemt6WTNrNWFWbFlUbXhNV0Vwc1lrZFdhR015VlhWbFYwWjBZa1ZDZVZwWFducE1NMUpvV2pOTmRtUnFRWFZQVkdkMVRVUkJOVUpuYjNJS1FtZEZSVUZaVHk5TlFVVkNRa04wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JBcGlibEYxV1RJNWRFMUNTVWREYVhOSFFWRlJRbWMzT0hkQlVVbEZRa2hDTVdNeVozZE9aMWxMUzNkWlFrSkJSMFIyZWtGQ1FYZFJiMDlYVlhsTlIwcHRDazVYVFhoT1JFcHNUbFJOZDA1NlFtcFpNa2swVFhwSmQxbFVTWGROZWtVeFdtMWFiVmxxVVhoT1JGazFXbFJCWkVKbmIzSkNaMFZGUVZsUEwwMUJSVVVLUWtFNVUxcFhlR3haV0U1c1NVVk9kbUp1VW5saFYwbDNVRkZaUzB0M1dVSkNRVWRFZG5wQlFrSlJVWFppTTBKc1lta3hNRnBYZUd4aVYxWXdZMjVyZGdwaU0wSnNZbTVTYkdKSFZuUmFXRko1WlZNeGFtSXllSE5hVjA0d1lqTkpkR050Vm5OYVYwWjZXbGhOZDBoM1dVdExkMWxDUWtGSFJIWjZRVUpDWjFGU0NtTnRWbTFqZVRrd1dWZGtla3d6V1hkTWFtczBUR3BCZDA5M1dVdExkMWxDUWtGSFJIWjZRVUpEUVZGMFJFTjBiMlJJVW5kamVtOTJURE5TZG1FeVZuVUtURzFHYW1SSGJIWmliazExV2pKc01HRklWbWxrV0U1c1kyMU9kbUp1VW14aWJsRjFXVEk1ZEUxSlIwbENaMjl5UW1kRlJVRlpUeTlOUVVWS1FraHZUUXBsUjJnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemwyWTBkV2RVeFlVbXhpUjFaMFdsaFNlV1ZUT1haalIxWjFaRWRXYzFwWE1XeGtTRW8xQ2t4WFRuWmlSM2hzV1ROU2RtTnBNWGxhVjNoc1dWaE9iR041T0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU0yTjVPV2xaV0U1c1RGaEtiR0pIVm1nS1l6SlZkV1ZYUm5SaVJVSjVXbGRhZWt3elVtaGFNMDEyWkdwQmRVOVVaM1ZOUkVFMFFtZHZja0puUlVWQldVOHZUVUZGUzBKRGIwMUxSR3hzVFdwQ2FRcGFhbFpxVFZSUmVWcFVWWHBOUkdOM1dUSk9hVTlFVFhsTlIwVjVUVVJOZUU1WFdtMWFiVWt3VFZSUk1rOVhWWGRJVVZsTFMzZFpRa0pCUjBSMmVrRkNDa04zVVZCRVFURnVZVmhTYjJSWFNYUmhSemw2WkVkV2EwMUdTVWREYVhOSFFWRlJRbWMzT0hkQlVYZEZVa0Y0UTJGSVVqQmpTRTAyVEhrNWJtRllVbThLWkZkSmRWa3lPWFJNTWpsM1dsYzBkR1JIVm5OYVZ6RnNaRWhLTlV3eU9YZGFWelV3V2xkNGJHSlhWakJqYm10MFdUSTVjMkpIVm1wa1J6bDVURmhLYkFwaVIxWm9ZekpXZWsxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDlYVlhsTlIwcHRUbGROZUU1RVNteE9WRTEzVG5wQ2Fsa3lTVFJOZWtsM0NsbFVTWGROZWtVeFdtMWFiVmxxVVhoT1JGazFXbFJCYUVKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWsxTlJWaEtiRnB1VFhaa1IwWnVZM2s1TWsxRE5EVUtUME0wZDAxQ2EwZERhWE5IUVZGUlFtYzNPSGRCVVRoRlEzZDNTazVFUVhkTmFsVjZUbXBqTWsxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhQXBoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NamwzV2xjMGRHUkhWbk5hVnpGc1pFaEtOVTFDWjBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGQ2tObmQwbE9SR3MxVDFSbmQwMUVTWGRuV1hOSFEybHpSMEZSVVVKbk56aDNRVkpKUldaUmVEZGhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hRS1RESTVkMXBYTkhSa1IxWnpXbGN4YkdSSVNqVk1NamwzV2xjMU1GcFhlR3hpVjFZd1kyNXJkRmt5T1hOaVIxWnFaRWM1ZVV4WVNteGlSMVpvWXpKV2VncE1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wcHNZa2RXYUdNeVZYUlpNamwxWkVoS2NGbHBOVFZaVnpGelVVaEtiRnB1VFhaa1IwWnVDbU41T1RKTlF6UTFUME0wZDAxRVowZERhWE5IUVZGUlFtYzNPSGRCVWsxRlMyZDNiMDlYVlhsTlIwcHRUbGROZUU1RVNteE9WRTEzVG5wQ2Fsa3lTVFFLVFhwSmQxbFVTWGROZWtVeFdtMWFiVmxxVVhoT1JGazFXbFJCVlVKbmIzSkNaMFZGUVZsUEwwMUJSVlZDUVZsTlFraENNV015WjNka1VWbExTM2RaUWdwQ1FVZEVkbnBCUWtaUlVtNUVSMVp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZak5DYkdKcE1UQmFWM2hzWWxkV01HTnVhM1ppTTBKc0NtSnVVbXhpUjFaMFdsaFNlV1ZUTVdwaU1uaHpXbGRPTUdJelNYUmpiVlp6V2xkR2VscFlUWFpaVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBuTWs1RVJYZ0tUbnBGTVU1cVkzWlpXRkl3V2xjeGQyUklUWFpOYWtGWFFtZHZja0puUlVWQldVOHZUVUZGVjBKQlowMUNia0l4V1cxNGNGbDZRMEpwWjFsTFMzZFpRZ3BDUVVoWFpWRkpSVUZuVWpoQ1NHOUJaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQQ2tGQlFVSnFjM1JvUlVOUlFVRkJVVVJCUldOM1VsRkpaMWg2Y2xaME0xQjRkU3ROWVZKRkswUkdORzlGUldNMGVucHphSGR1VDJ4bGMwZGlla2xwYnpNS0wxWmpRMGxSUkZNelJ6QmlNemRhYUhRNGFITjJUSEozYkc1UFFXYzJWRXh1U1ZSS09HTjNkMVEzTW5sMVRVdFlUbFJCUzBKblozRm9hMnBQVUZGUlJBcEJkMDV1UVVSQ2EwRnFRWGxFUkZSYVFqQlRPVXBGYkZsSGJuTnZWVmhLYm04MU5Fc3ZUVUZUTlN0RFFVMU9lbWRqUWpWQ2JrRk5OMWhNUjBoV01HRnhDbVpaY21weFkyOXFia3RaUTAxSFRWRnFjalpUVGt0Q2NVaEtZVGwxTDBSTlQySlpNa0pKTVV0ME4yTnhOemhFT0VOcVMzQmFVblJoYnpadFVVMUVZMk1LUms5M2VYWnhWalJPVld0dlpsRTlQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0=&quot;,&quot;integratedTime&quot;:1712809120,&quot;logIndex&quot;:84797936,&quot;logID&quot;:&quot;c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d&quot;}},&quot;Issuer&quot;:&quot;https://token.actions.githubusercontent.com&quot;,&quot;Subject&quot;:&quot;https://github.com/open-telemetry/opentelemetry-collector-releases/.github/workflows/base-release.yaml@refs/tags/v0.98.0&quot;,&quot;githubWorkflowName&quot;:&quot;Release Contrib&quot;,&quot;githubWorkflowRef&quot;:&quot;refs/tags/v0.98.0&quot;,&quot;githubWorkflowRepository&quot;:&quot;open-telemetry/opentelemetry-collector-releases&quot;,&quot;githubWorkflowSha&quot;:&quot;9e20bf5c142e53070ccb8320a20315fffb41469e&quot;,&quot;githubWorkflowTrigger&quot;:&quot;push&quot;}},{&quot;critical&quot;:{&quot;identity&quot;:{&quot;docker-reference&quot;:&quot;ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib&quot;},&quot;image&quot;:{&quot;docker-manifest-digest&quot;:&quot;sha256:5cea85bcbc734a3c0a641368e5a4ea9d31b472997e9f2feca57eeb4a147fcf1a&quot;},&quot;type&quot;:&quot;cosign container image signature&quot;},&quot;optional&quot;:{&quot;1.3.6.1.4.1.57264.1.1&quot;:&quot;https://token.actions.githubusercontent.com&quot;,&quot;1.3.6.1.4.1.57264.1.2&quot;:&quot;push&quot;,&quot;1.3.6.1.4.1.57264.1.3&quot;:&quot;9e20bf5c142e53070ccb8320a20315fffb41469e&quot;,&quot;1.3.6.1.4.1.57264.1.4&quot;:&quot;Release Contrib&quot;,&quot;1.3.6.1.4.1.57264.1.5&quot;:&quot;open-telemetry/opentelemetry-collector-releases&quot;,&quot;1.3.6.1.4.1.57264.1.6&quot;:&quot;refs/tags/v0.98.0&quot;,&quot;Bundle&quot;:{&quot;SignedEntryTimestamp&quot;:&quot;MEUCIQD1ehDnPO6fzoPIpeQ3KFuYHHBiX7RcEbpo9B2r7JAlzwIgZ1bsuQz7gAXbNU1IEdsTQgfAnRk3xVXO16GnKXM2sAQ=&quot;,&quot;Payload&quot;:{&quot;body&quot;:&quot;eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIxMzVjY2RlN2YzZTNhYjU2NmFmYzJhYWU3MDljYmJlNmFhMDZlZWMzNDA2MWNkZjMyNmRhYzM2MmY0NWM4Yjg4In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJRU92QXl0aE5RVGNvNHFMdG9GZUVOV0toNCtEK2I5SUxyYWhoa09WMmVBM0FpQjNEL2FpUGd1T05zUlB5alhaWk1hdnlCam0vMkVxNFNUMkZJWHozTnpyYWc9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaHBSRU5EUW5jMlowRjNTVUpCWjBsVlZuRlRLMnd4WXpoMWVFUktOWEppZDAxMlVuaDBSR3hXVW1nMGQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFJkMDVFUlhoTlJGRjRUMFJSZVZkb1kwNU5hbEYzVGtSRmVFMUVVWGxQUkZGNVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVYyWlRCdGJrRkdRVzl1TVZoUGRIVlRMMXBNT0djeE5YUlJkVmxPTmtRemVUUlBWM0FLT1ZSTFMwUlVkRkJHU2xST1ZrWlJkVTlKUWs1bVJqWk1ORTlGYkd4dlZuUndaSE5uYjB0NVZGTnlPR3hTV1c1S1JIRlBRMEpwTUhkbloxbHdUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZDSzFkSENuVmtlRE5IZUcxS1RWUkpUVVJyYW13clJtdzFXRzkzZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJkWldVZEJNVlZrUlZGRlFpOTNVamhOU0hGSFpVZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZtbE1iVTUyWWxNNWRtTkhWblZNV0ZKc1lrZFdkQXBhV0ZKNVpWTTVkbU5IVm5Wa1IxWnpXbGN4YkdSSVNqVk1WMDUyWWtkNGJGa3pVblpqYVRGNVdsZDRiRmxZVG14amVUaDFXakpzTUdGSVZtbE1NMlIyQ21OdGRHMWlSemt6WTNrNWFWbFlUbXhNV0Vwc1lrZFdhR015VlhWbFYwWjBZa1ZDZVZwWFducE1NMUpvV2pOTmRtUnFRWFZQVkdkMVRVUkJOVUpuYjNJS1FtZEZSVUZaVHk5TlFVVkNRa04wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JBcGlibEYxV1RJNWRFMUNTVWREYVhOSFFWRlJRbWMzT0hkQlVVbEZRa2hDTVdNeVozZE9aMWxMUzNkWlFrSkJSMFIyZWtGQ1FYZFJiMDlYVlhsTlIwcHRDazVYVFhoT1JFcHNUbFJOZDA1NlFtcFpNa2swVFhwSmQxbFVTWGROZWtVeFdtMWFiVmxxVVhoT1JGazFXbFJCWkVKbmIzSkNaMFZGUVZsUEwwMUJSVVVLUWtFNVUxcFhlR3haV0U1c1NVVk9kbUp1VW5saFYwbDNVRkZaUzB0M1dVSkNRVWRFZG5wQlFrSlJVWFppTTBKc1lta3hNRnBYZUd4aVYxWXdZMjVyZGdwaU0wSnNZbTVTYkdKSFZuUmFXRko1WlZNeGFtSXllSE5hVjA0d1lqTkpkR050Vm5OYVYwWjZXbGhOZDBoM1dVdExkMWxDUWtGSFJIWjZRVUpDWjFGU0NtTnRWbTFqZVRrd1dWZGtla3d6V1hkTWFtczBUR3BCZDA5M1dVdExkMWxDUWtGSFJIWjZRVUpEUVZGMFJFTjBiMlJJVW5kamVtOTJURE5TZG1FeVZuVUtURzFHYW1SSGJIWmliazExV2pKc01HRklWbWxrV0U1c1kyMU9kbUp1VW14aWJsRjFXVEk1ZEUxSlIwbENaMjl5UW1kRlJVRlpUeTlOUVVWS1FraHZUUXBsUjJnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemwyWTBkV2RVeFlVbXhpUjFaMFdsaFNlV1ZUT1haalIxWjFaRWRXYzFwWE1XeGtTRW8xQ2t4WFRuWmlSM2hzV1ROU2RtTnBNWGxhVjNoc1dWaE9iR041T0hWYU1td3dZVWhXYVV3elpIWmpiWFJ0WWtjNU0yTjVPV2xaV0U1c1RGaEtiR0pIVm1nS1l6SlZkV1ZYUm5SaVJVSjVXbGRhZWt3elVtaGFNMDEyWkdwQmRVOVVaM1ZOUkVFMFFtZHZja0puUlVWQldVOHZUVUZGUzBKRGIwMUxSR3hzVFdwQ2FRcGFhbFpxVFZSUmVWcFVWWHBOUkdOM1dUSk9hVTlFVFhsTlIwVjVUVVJOZUU1WFdtMWFiVWt3VFZSUk1rOVhWWGRJVVZsTFMzZFpRa0pCUjBSMmVrRkNDa04zVVZCRVFURnVZVmhTYjJSWFNYUmhSemw2WkVkV2EwMUdTVWREYVhOSFFWRlJRbWMzT0hkQlVYZEZVa0Y0UTJGSVVqQmpTRTAyVEhrNWJtRllVbThLWkZkSmRWa3lPWFJNTWpsM1dsYzBkR1JIVm5OYVZ6RnNaRWhLTlV3eU9YZGFWelV3V2xkNGJHSlhWakJqYm10MFdUSTVjMkpIVm1wa1J6bDVURmhLYkFwaVIxWm9ZekpXZWsxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDlYVlhsTlIwcHRUbGROZUU1RVNteE9WRTEzVG5wQ2Fsa3lTVFJOZWtsM0NsbFVTWGROZWtVeFdtMWFiVmxxVVhoT1JGazFXbFJCYUVKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWsxTlJWaEtiRnB1VFhaa1IwWnVZM2s1TWsxRE5EVUtUME0wZDAxQ2EwZERhWE5IUVZGUlFtYzNPSGRCVVRoRlEzZDNTazVFUVhkTmFsVjZUbXBqTWsxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhQXBoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NamwzV2xjMGRHUkhWbk5hVnpGc1pFaEtOVTFDWjBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGQ2tObmQwbE9SR3MxVDFSbmQwMUVTWGRuV1hOSFEybHpSMEZSVVVKbk56aDNRVkpKUldaUmVEZGhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hRS1RESTVkMXBYTkhSa1IxWnpXbGN4YkdSSVNqVk1NamwzV2xjMU1GcFhlR3hpVjFZd1kyNXJkRmt5T1hOaVIxWnFaRWM1ZVV4WVNteGlSMVpvWXpKV2VncE1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wcHNZa2RXYUdNeVZYUlpNamwxWkVoS2NGbHBOVFZaVnpGelVVaEtiRnB1VFhaa1IwWnVDbU41T1RKTlF6UTFUME0wZDAxRVowZERhWE5IUVZGUlFtYzNPSGRCVWsxRlMyZDNiMDlYVlhsTlIwcHRUbGROZUU1RVNteE9WRTEzVG5wQ2Fsa3lTVFFLVFhwSmQxbFVTWGROZWtVeFdtMWFiVmxxVVhoT1JGazFXbFJCVlVKbmIzSkNaMFZGUVZsUEwwMUJSVlZDUVZsTlFraENNV015WjNka1VWbExTM2RaUWdwQ1FVZEVkbnBCUWtaUlVtNUVSMVp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZak5DYkdKcE1UQmFWM2hzWWxkV01HTnVhM1ppTTBKc0NtSnVVbXhpUjFaMFdsaFNlV1ZUTVdwaU1uaHpXbGRPTUdJelNYUmpiVlp6V2xkR2VscFlUWFpaVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBuTWs1RVJYZ0tUbnBGTVU1cVkzWlpXRkl3V2xjeGQyUklUWFpOYWtGWFFtZHZja0puUlVWQldVOHZUVUZGVjBKQlowMUNia0l4V1cxNGNGbDZRMEpwZDFsTFMzZFpRZ3BDUVVoWFpWRkpSVUZuVWpsQ1NITkJaVkZDTTBGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQQ2tGQlFVSnFjM1JvUjJKSlFVRkJVVVJCUldkM1VtZEphRUZQZUZNM2RteDRjVzVGYTBKVVRtSlZVRUpsUkZSbk0waGtlRlkyY0cxWk9FdGliREV6TjNBS1lWUnViMEZwUlVFelMyMUxVbU5uYWxBeVQzSmxORVpyVm5vNU4xaENNWGRsUzBOeWFXazFTMWx2UTB0bVkxRktSREJSZDBObldVbExiMXBKZW1vd1JRcEJkMDFFWVVGQmQxcFJTWGhCUzNwcVpHMUZTV2gzV21Kb1lVSlNlalk1Y1N0MWVrNVZSMmxhYlRWVk4xcE5aWFJMUTFSM1VFTkljRkZQVldvdlVERkJDa2R0YWt3elJucFFObTVpYkRGblNYZFNUbXN6UkhkNWMwOUJUMHhoUVVoR09IaHhZV0ZzT0U5WGNGRmFhRGh4TTJVMVNVSmFXR0ZWVkhocFlWbGFTM29LUXpWS1RGVlNWbnBMTURsd04wVjBUd290TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0=&quot;,&quot;integratedTime&quot;:1712809122,&quot;logIndex&quot;:84797940,&quot;logID&quot;:&quot;c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d&quot;}},&quot;Issuer&quot;:&quot;https://token.actions.githubusercontent.com&quot;,&quot;Subject&quot;:&quot;https://github.com/open-telemetry/opentelemetry-collector-releases/.github/workflows/base-release.yaml@refs/tags/v0.98.0&quot;,&quot;githubWorkflowName&quot;:&quot;Release Contrib&quot;,&quot;githubWorkflowRef&quot;:&quot;refs/tags/v0.98.0&quot;,&quot;githubWorkflowRepository&quot;:&quot;open-telemetry/opentelemetry-collector-releases&quot;,&quot;githubWorkflowSha&quot;:&quot;9e20bf5c142e53070ccb8320a20315fffb41469e&quot;,&quot;githubWorkflowTrigger&quot;:&quot;push&quot;}}]
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;We started signing the images with release &lt;code&gt;v0.95.0&lt;/code&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/CONTRIBUTING.md&quot;&gt;Contributing Guide&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;Here is a list of community roles with current and previous members:&lt;/p&gt; 
&lt;h3&gt;Maintainers&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/codeboten&quot;&gt;Alex Boten&lt;/a&gt;, Grafana Labs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bogdandrutu&quot;&gt;Bogdan Drutu&lt;/a&gt;, Snowflake&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dmitryax&quot;&gt;Dmitrii Anoshin&lt;/a&gt;, Splunk&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/evan-bradley&quot;&gt;Evan Bradley&lt;/a&gt;, Dynatrace&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mx-psi&quot;&gt;Pablo Baeyens&lt;/a&gt;, DataDog&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more information about the maintainer role, see the &lt;a href=&quot;https://github.com/open-telemetry/community/raw/main/guides/contributor/membership.md#maintainer&quot;&gt;community repository&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Approvers&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/atoulme&quot;&gt;Antoine Toulme&lt;/a&gt;, Splunk&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dmathieu&quot;&gt;Damien Mathieu&lt;/a&gt;, Elastic&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jade-guiton-dd&quot;&gt;Jade Guiton&lt;/a&gt;, Datadog&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jmacd&quot;&gt;Joshua MacDonald&lt;/a&gt;, Microsoft&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TylerHelmuth&quot;&gt;Tyler Helmuth&lt;/a&gt;, Grafana Labs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/songy23&quot;&gt;Yang Song&lt;/a&gt;, Datadog&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more information about the approver role, see the &lt;a href=&quot;https://github.com/open-telemetry/community/raw/main/guides/contributor/membership.md#approver&quot;&gt;community repository&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;In addition to what is described at the organization-level, the SIG Collector requires all core approvers to take part in rotating the role of the &lt;a href=&quot;https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/docs/release.md#release-managers&quot;&gt;release manager&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Triagers&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/andrzej-stencel&quot;&gt;Andrzej Stencel&lt;/a&gt;, Elastic&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ArthurSens&quot;&gt;Arthur Silva Sens&lt;/a&gt;, Grafana Labs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/VihasMakwana&quot;&gt;Vihas Makwana&lt;/a&gt;, Elastic&lt;/li&gt; 
 &lt;li&gt;Actively seeking contributors to triage issues&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more information about the triager role, see the &lt;a href=&quot;https://github.com/open-telemetry/community/raw/main/guides/contributor/membership.md#triager&quot;&gt;community repository&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Emeritus&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/alolita&quot;&gt;Alolita Sharma&lt;/a&gt;, Triager&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/andrewhsu&quot;&gt;Andrew Hsu&lt;/a&gt;, Triager&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/axw&quot;&gt;Andrew Wilkins&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Aneurysm9&quot;&gt;Anthony Mirabella&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sincejune&quot;&gt;Chao Weng&lt;/a&gt;, Triager&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/djaglowski&quot;&gt;Daniel Jaglowski&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/james-bebbington&quot;&gt;James Bebbington&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jrcamp&quot;&gt;Jay Camp&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jpkrohling&quot;&gt;Juraci Paixão Kröhling&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nilebox&quot;&gt;Nail Islamov&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/owais&quot;&gt;Owais Lone&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pjanotti&quot;&gt;Paulo Janotti&lt;/a&gt;, Maintainer&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/punya&quot;&gt;Punya Biswal&lt;/a&gt;, Triager&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rghetia&quot;&gt;Rahul Patel&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/flands&quot;&gt;Steve Flanders&lt;/a&gt;, Triager&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sjkaris&quot;&gt;Steven Karis&lt;/a&gt;, Approver&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tigrannajaryan&quot;&gt;Tigran Najaryan&lt;/a&gt;, Maintainer&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more information about the emeritus role, see the &lt;a href=&quot;https://github.com/open-telemetry/community/raw/main/guides/contributor/membership.md#emeritus-maintainerapprovertriager&quot;&gt;community repository&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Thanks to all of our contributors!&lt;/h3&gt; 
&lt;a href=&quot;https://github.com/open-telemetry/opentelemetry-collector/graphs/contributors&quot;&gt; &lt;img alt=&quot;Repo contributors&quot; src=&quot;https://contrib.rocks/image?repo=open-telemetry/opentelemetry-collector&quot; /&gt; &lt;/a&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/c6199a9ac1345c92ec784344dfc91e2ecf4d354387e02cdb49e6df7579a71dff/open-telemetry/opentelemetry-collector" medium="image" />
      
    </item>
    
  </channel>
</rss>
