> ## Documentation Index
> Fetch the complete documentation index at: https://felimet-hub.jmcores.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Appendix D: Further Resources and Communities

> Official documentation, cross-tool standards, community discovery hubs, security and supply-chain tools, and researcher workflow resources. Community lists are discovery entry points only, not endorsements.

export const ResourceList = ({lang = "zh", resources = [], categories = []}) => {
  const UI = lang === "en" ? {
    allCats: "All",
    noResults: "No matching resources.",
    visit: "Visit",
    count: n => n === 1 ? "1 resource" : `${n} resources`,
    types: {
      official: "Official",
      standard: "Standard",
      community: "Community",
      security: "Security",
      research: "Research",
      tool: "Tool",
      platform: "Platform"
    }
  } : {
    allCats: "全部",
    noResults: "沒有符合的資源。",
    visit: "前往",
    count: n => `${n} 個資源`,
    types: {
      official: "官方",
      standard: "標準",
      community: "社群",
      security: "安全",
      research: "研究",
      tool: "工具",
      platform: "平台"
    }
  };
  const ACCENT = "#bf7551";
  const ACCENT_L = "#cf8a68";
  const ACCENT_BG = "rgba(191,117,81,0.08)";
  const ACCENT_BDR = "rgba(191,117,81,0.35)";
  const TYPE_COLORS = {
    official: {
      light: ["#2563a0", "rgba(37,99,160,0.08)", "rgba(37,99,160,0.3)"],
      dark: ["#7ab4e0", "rgba(122,180,224,0.09)", "rgba(122,180,224,0.3)"]
    },
    standard: {
      light: ["#4a7c59", "rgba(74,124,89,0.08)", "rgba(74,124,89,0.3)"],
      dark: ["#7ecf96", "#1a3328", "rgba(126,207,150,0.3)"]
    },
    community: {
      light: ["#7a5c2e", "rgba(122,92,46,0.08)", "rgba(122,92,46,0.3)"],
      dark: ["#d4a96a", "rgba(212,169,106,0.09)", "rgba(212,169,106,0.3)"]
    },
    security: {
      light: ["#8b3a3a", "rgba(139,58,58,0.08)", "rgba(139,58,58,0.3)"],
      dark: ["#e07a7a", "rgba(224,122,122,0.09)", "rgba(224,122,122,0.3)"]
    },
    research: {
      light: ["#6b4f8e", "rgba(107,79,142,0.08)", "rgba(107,79,142,0.3)"],
      dark: ["#c4a8e8", "rgba(196,168,232,0.09)", "rgba(196,168,232,0.3)"]
    },
    tool: {
      light: [ACCENT, ACCENT_BG, ACCENT_BDR],
      dark: [ACCENT_L, "rgba(207,138,104,0.09)", "rgba(207,138,104,0.3)"]
    },
    platform: {
      light: ["#2e7a7a", "rgba(46,122,122,0.08)", "rgba(46,122,122,0.3)"],
      dark: ["#7ecfcf", "rgba(126,207,207,0.09)", "rgba(126,207,207,0.3)"]
    }
  };
  const getTypePalette = type => TYPE_COLORS[type] || TYPE_COLORS.tool;
  const safeRes = Array.isArray(resources) ? resources : [];
  const safeCats = Array.isArray(categories) ? categories : [];
  const [cat, setCat] = useState("__all__");
  const [isDark, setIsDark] = useState(false);
  useEffect(() => {
    const detect = () => setIsDark(document.documentElement.classList.contains("dark"));
    detect();
    const obs = new MutationObserver(detect);
    obs.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ["class"]
    });
    return () => obs.disconnect();
  }, []);
  const filtered = safeRes.filter(r => cat === "__all__" || r.category === cat);
  const css = `
  .rl-root {
    --rl-bg:         #FAF8F3;
    --rl-surface:    rgba(0,0,0,0.025);
    --rl-border:     rgba(0,0,0,0.09);
    --rl-text:       #2b2722;
    --rl-dim:        #6f6a62;
    --rl-faint:      #8a8378;
    --rl-accent:     ${ACCENT};
    --rl-accent-bg:  ${ACCENT_BG};
    --rl-accent-bdr: ${ACCENT_BDR};
    --rl-card-bg:    #ffffff;
    font-size: 14px;
    border: 1px solid var(--rl-border);
    border-radius: 14px;
    background: var(--rl-bg);
    color: var(--rl-text);
    overflow: hidden;
  }
  .dark .rl-root {
    --rl-bg:         #1b1a18;
    --rl-surface:    rgba(255,255,255,0.03);
    --rl-border:     rgba(255,255,255,0.08);
    --rl-text:       #e7e3da;
    --rl-dim:        #a8a299;
    --rl-faint:      #706b64;
    --rl-accent:     ${ACCENT_L};
    --rl-accent-bg:  rgba(207,138,104,0.09);
    --rl-accent-bdr: rgba(207,138,104,0.35);
    --rl-card-bg:    #242220;
  }

  /* ── 分類 chip + 計數列 ── */
  .rl-header {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 11px 16px 9px;
    border-bottom: 1px solid var(--rl-border);
    background: var(--rl-surface);
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    flex-wrap: nowrap;
  }
  .rl-header::-webkit-scrollbar { display: none; }
  .rl-chip {
    flex-shrink: 0;
    padding: 4px 11px;
    border-radius: 16px;
    border: 1px solid var(--rl-border);
    background: transparent;
    color: var(--rl-dim);
    font: inherit;
    font-size: 12.5px;
    font-weight: 500;
    cursor: pointer;
    white-space: nowrap;
    transition: border-color 0.13s, background 0.13s, color 0.13s;
  }
  .rl-chip:hover { background: rgba(0,0,0,0.025); color: var(--rl-text); }
  .dark .rl-chip:hover { background: rgba(255,255,255,0.04); }
  .rl-chip-on {
    border-color: var(--rl-accent-bdr);
    background: var(--rl-accent-bg);
    color: var(--rl-accent);
    font-weight: 700;
  }
  .rl-count {
    margin-left: auto;
    flex-shrink: 0;
    font-size: 12px;
    color: var(--rl-faint);
    white-space: nowrap;
    padding-left: 8px;
  }

  /* ── 資源卡片格線 ── */
  .rl-grid {
    padding: 14px 16px;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 10px;
  }
  .rl-empty {
    padding: 28px 16px;
    text-align: center;
    color: var(--rl-faint);
    font-size: 13.5px;
  }

  /* ── 資源卡 ── */
  .rl-card {
    border: 1px solid var(--rl-border);
    border-radius: 10px;
    background: var(--rl-card-bg);
    padding: 12px 14px;
    display: flex;
    flex-direction: column;
    gap: 7px;
    transition: border-color 0.13s, box-shadow 0.13s;
  }
  .rl-card:hover {
    border-color: var(--rl-accent-bdr);
    box-shadow: 0 2px 8px rgba(191,117,81,0.08);
  }
  .rl-card-top {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
  }
  .rl-name {
    font-size: 13.5px;
    font-weight: 700;
    color: var(--rl-text);
    line-height: 1.35;
  }
  .rl-type-badge {
    flex-shrink: 0;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    border-radius: 4px;
    padding: 2px 6px;
    white-space: nowrap;
    margin-top: 1px;
  }
  .rl-desc {
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--rl-dim);
    flex: 1 1 0;
  }
  .rl-url {
    font-size: 11.5px;
    font-family: "JetBrains Mono", "Fira Code", monospace;
    color: var(--rl-faint);
    word-break: break-all;
    line-height: 1.4;
  }
  .rl-visit-link {
    align-self: flex-end;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 12px;
    font-weight: 600;
    color: var(--rl-accent);
    text-decoration: none;
    padding: 3px 10px;
    border: 1px solid var(--rl-accent-bdr);
    border-radius: 6px;
    background: var(--rl-accent-bg);
    transition: background 0.12s;
  }
  .rl-visit-link:hover { background: rgba(191,117,81,0.14); }

  /* ── 手機 ── */
  @media (max-width: 600px) {
    .rl-grid { grid-template-columns: 1fr; padding: 10px 12px; }
    .rl-header { padding: 9px 12px 7px; }
  }
  `;
  return <div className="rl-root">
      <style>{css}</style>

      {}
      <div className="rl-header">
        <button type="button" className={"rl-chip" + (cat === "__all__" ? " rl-chip-on" : "")} onClick={() => setCat("__all__")}>
          {UI.allCats}
        </button>
        {safeCats.map(c => <button key={c.id} type="button" className={"rl-chip" + (cat === c.id ? " rl-chip-on" : "")} onClick={() => setCat(c.id)}>
            {c.label}
          </button>)}
        <span className="rl-count">{UI.count(filtered.length)}</span>
      </div>

      {}
      {filtered.length === 0 ? <div className="rl-empty">{UI.noResults}</div> : <div className="rl-grid">
          {filtered.map(r => {
    const palette = getTypePalette(r.type);
    const mode = isDark ? palette.dark : palette.light;
    const typeName = UI.types[r.type] || r.type || "";
    return <div key={r.id} className="rl-card">
                <div className="rl-card-top">
                  <span className="rl-name">{r.name}</span>
                  {typeName && <span className="rl-type-badge" style={{
      color: mode[0],
      background: mode[1],
      border: `1px solid ${mode[2]}`
    }}>
                      {typeName}
                    </span>}
                </div>
                {r.desc && <p className="rl-desc">{r.desc}</p>}
                {r.url && <span className="rl-url">{r.url.replace(/^https?:\/\//, "")}</span>}
                {r.url && <a href={r.url} className="rl-visit-link" target="_blank" rel="noopener noreferrer">
                    {UI.visit}
                    <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round">
                      <line x1="7" y1="17" x2="17" y2="7" />
                      <polyline points="7 7 17 7 17 17" />
                    </svg>
                  </a>}
              </div>;
  })}
        </div>}
    </div>;
};

<Info>
  This list covers official documentation entry points, cross-tool standards, community discovery resources, security scanning tools, and researcher workflow tools. For the evaluation framework see <a href="/en/code-agent/judgment/fit-evaluation">03-1</a>, <a href="/en/code-agent/judgment/beyond-github-stars">03-2</a>, and <a href="/en/code-agent/judgment/security-privacy-supply-chain">03-3</a>. Apply those three sections' scanning SOP before installing any third-party resource.
</Info>

<Warning>
  Links and content verified as of 2026-06; treat each vendor's official page as the authoritative source. Community resources change at any time; appearing here means only "was included," not "worth installing."
</Warning>

<ResourceList
  lang="en"
  categories={[
{ id: "official-docs",   label: "Official Docs" },
{ id: "standards",       label: "Standards" },
{ id: "community",       label: "Community" },
{ id: "security",        label: "Security" },
{ id: "inference",       label: "Local Inference" },
{ id: "academic",        label: "Academic Workflow" },
{ id: "reproducibility", label: "Reproducibility" },
{ id: "platform",        label: "Platforms" },
]}
  resources={[
{
  id: "claude-code-docs",
  name: "Anthropic Claude Code",
  type: "official",
  category: "official-docs",
  url: "https://code.claude.com/docs",
  desc: "Official Claude Code documentation hub; primary source for all CLI settings, hooks, skills, subagents, plugins, and MCP chapters.",
},
{
  id: "anthropic-account",
  name: "Anthropic Account & Privacy",
  type: "official",
  category: "official-docs",
  url: "https://support.claude.com",
  desc: "Account settings, Help Improve Claude toggle, retention periods, Team / Enterprise terms (support.claude.com + privacy.claude.com).",
},
{
  id: "anthropic-cowork",
  name: "Anthropic Cowork",
  type: "official",
  category: "official-docs",
  url: "https://anthropic.com/product/claude-cowork",
  desc: "Cowork product page; specific connector configuration mechanisms require the official support docs.",
},
{
  id: "anthropic-engineering",
  name: "Anthropic Engineering",
  type: "official",
  category: "official-docs",
  url: "https://anthropic.com/engineering",
  desc: "Engineering team blog; first-hand source for conceptual articles on context engineering, augmented LLM, and similar topics.",
},
{
  id: "openai-chatgpt",
  name: "OpenAI ChatGPT",
  type: "official",
  category: "official-docs",
  url: "https://help.openai.com",
  desc: "ChatGPT consumer settings, Custom Instructions, Memory, and Projects.",
},
{
  id: "openai-codex",
  name: "OpenAI Codex",
  type: "official",
  category: "official-docs",
  url: "https://developers.openai.com/codex",
  desc: "Codex CLI / IDE settings, config.toml, AGENTS.md, hooks (experimental).",
},
{
  id: "openai-policy",
  name: "OpenAI Policies",
  type: "official",
  category: "official-docs",
  url: "https://openai.com/policies",
  desc: "Data use, privacy, API terms of service.",
},
{
  id: "google-gemini",
  name: "Google Gemini",
  type: "official",
  category: "official-docs",
  url: "https://support.google.com/gemini",
  desc: "Gemini consumer Gems, Personal context, Keep Activity toggle.",
},
{
  id: "google-antigravity",
  name: "Google Antigravity",
  type: "official",
  category: "official-docs",
  url: "https://ai.google.dev",
  desc: "Antigravity and Gemini API developer documentation (ai.google.dev + developers.googleblog.com + Google Codelabs; some mechanisms require re-checking against your installed version's official page).",
},
{
  id: "github-copilot",
  name: "GitHub Copilot",
  type: "official",
  category: "official-docs",
  url: "https://docs.github.com/copilot",
  desc: "Copilot documentation hub for all surfaces (CLI, IDE, Chat, coding agent).",
},
{
  id: "vscode-copilot",
  name: "VS Code Copilot",
  type: "official",
  category: "official-docs",
  url: "https://code.visualstudio.com/docs/copilot",
  desc: "Copilot Chat inside VS Code and IDE settings such as chat.instructionsFilesLocations.",
},
{
  id: "cursor-docs",
  name: "Cursor",
  type: "official",
  category: "official-docs",
  url: "https://cursor.com/docs",
  desc: "Cursor rules, ignore files, MCP, Composer.",
},
{
  id: "linux-foundation-aaif",
  name: "Linux Foundation AAIF",
  type: "official",
  category: "official-docs",
  url: "https://linuxfoundation.org",
  desc: "Agentic AI Foundation; governance for MCP, goose, and AGENTS.md founding projects.",
},
{
  id: "agents-md-standard",
  name: "AGENTS.md specification site",
  type: "standard",
  category: "standards",
  url: "https://agents.md",
  desc: "The open rules-file standard across tools; governed by the Agentic AI Foundation (AAIF) under the Linux Foundation.",
},
{
  id: "mcp-spec",
  name: "MCP (Model Context Protocol) specification site",
  type: "standard",
  category: "standards",
  url: "https://modelcontextprotocol.io",
  desc: "MCP specification, definitions of the three interface types (tools / resources / prompts), and transport evolution.",
},
{
  id: "claude-mcp-directory",
  name: "Claude official MCP server directory",
  type: "official",
  category: "standards",
  url: "https://claude.ai/directory",
  desc: "Anthropic's curated list of official MCP servers; a more trustworthy starting point for supply chain.",
},
{
  id: "snyk-security",
  name: "Snyk Security",
  type: "security",
  category: "standards",
  url: "https://snyk.io",
  desc: "ToxicSkills reports, CVEs, and third-party component risk research; key intelligence source for supply chain scanning.",
},
{
  id: "github-advisories",
  name: "GitHub Security Advisories",
  type: "security",
  category: "standards",
  url: "https://github.com/advisories",
  desc: "Query CVEs and vulnerability advisories by package, tool, or keyword; subscribe to the tools and libraries you depend on most.",
},
{
  id: "awesome-cursorrules",
  name: "PatrickJS/awesome-cursorrules",
  type: "community",
  category: "community",
  url: "https://github.com/PatrickJS/awesome-cursorrules",
  desc: "Community collection of Cursor .mdc rules; a community starting point for rule templates.",
},
{
  id: "voltagent-skills",
  name: "VoltAgent/awesome-agent-skills",
  type: "community",
  category: "community",
  url: "https://github.com/VoltAgent/awesome-agent-skills",
  desc: "Cross-tool skill collection (mostly Claude / Cursor).",
},
{
  id: "kodustech-skills",
  name: "kodustech/awesome-agent-skills",
  type: "community",
  category: "community",
  url: "https://github.com/kodustech/awesome-agent-skills",
  desc: "Another cross-tool skill collection.",
},
{
  id: "addyosmani-skills",
  name: "addyosmani/agent-skills",
  type: "community",
  category: "community",
  url: "https://github.com/addyosmani/agent-skills",
  desc: "Engineering-oriented skill templates.",
},
{
  id: "vscode-marketplace",
  name: "VS Code Marketplace (Copilot extensions)",
  type: "community",
  category: "community",
  url: "https://marketplace.visualstudio.com",
  desc: "Copilot extensions, language tools; apply supply chain SOP before installing.",
},
{
  id: "ripgrep",
  name: "rg (ripgrep)",
  type: "tool",
  category: "security",
  url: "https://github.com/BurntSushi/ripgrep",
  desc: "Preferred tool for scanning hidden Unicode / bidi, suspicious outbound connections, and dangerous commands; combines speed with full regex support.",
},
{
  id: "snyk-tool",
  name: "Snyk",
  type: "security",
  category: "security",
  url: "https://snyk.io",
  desc: "Package vulnerability scanning; author of the ToxicSkills report, key intelligence source for supply chain risk.",
},
{
  id: "trivy",
  name: "Trivy",
  type: "security",
  category: "security",
  url: "https://trivy.dev",
  desc: "Container, IaC, and SBOM scanning; recommended scanner for self-hosted agent environments.",
},
{
  id: "bandit",
  name: "bandit",
  type: "security",
  category: "security",
  url: "https://pypi.org/project/bandit",
  desc: "Python static security analysis; fast scanning tool for Python-heavy agent workflows.",
},
{
  id: "semgrep",
  name: "Semgrep",
  type: "security",
  category: "security",
  url: "https://semgrep.dev",
  desc: "Multi-language static analysis with custom rules for supply-chain fingerprinting.",
},
{
  id: "osv-dev",
  name: "OSV.dev",
  type: "security",
  category: "security",
  url: "https://osv.dev",
  desc: "Cross-ecosystem vulnerability database; covers npm, PyPI, Cargo, and more.",
},
{
  id: "agentshield",
  name: "agentshield",
  type: "security",
  category: "security",
  url: "https://github.com/affaan-m/agentshield",
  desc: "Security scanning tool for third-party skill / agent descriptor files; automated supply chain review.",
},
{
  id: "vllm",
  name: "vLLM",
  type: "tool",
  category: "inference",
  url: "https://github.com/vllm-project/vllm",
  desc: "High-throughput LLM serving; well-suited for local serving in research environments, supports PagedAttention and multi-GPU.",
},
{
  id: "llama-cpp",
  name: "llama.cpp",
  type: "tool",
  category: "inference",
  url: "https://github.com/ggerganov/llama.cpp",
  desc: "Local inference on CPU / Apple Silicon / low-VRAM setups; the widest GGUF format support.",
},
{
  id: "sglang",
  name: "SGLang",
  type: "tool",
  category: "inference",
  url: "https://github.com/sgl-project/sglang",
  desc: "Structured generation, radix attention, inference optimization; efficient option for long-context and multi-step reasoning.",
},
{
  id: "ollama",
  name: "Ollama",
  type: "tool",
  category: "inference",
  url: "https://ollama.com",
  desc: "Out-of-the-box local model management; run major open-source models with a single command.",
},
{
  id: "lm-studio",
  name: "LM Studio",
  type: "tool",
  category: "inference",
  url: "https://lmstudio.ai",
  desc: "GUI local model manager; suited for researchers without an engineering background.",
},
{
  id: "hf-transformers",
  name: "Hugging Face Transformers",
  type: "tool",
  category: "inference",
  url: "https://huggingface.co/docs/transformers",
  desc: "De-facto standard library for model loading, inference, and training.",
},
{
  id: "hf-hub",
  name: "Hugging Face Hub",
  type: "platform",
  category: "inference",
  url: "https://huggingface.co",
  desc: "Entry point for models, datasets, and Spaces; supply chain still needs to be verified yourself.",
},
{
  id: "open-webui",
  name: "Open WebUI",
  type: "tool",
  category: "inference",
  url: "https://github.com/open-webui/open-webui",
  desc: "Self-hosted chat interface compatible with Ollama / OpenAI-compatible APIs; suitable for multi-model research environments.",
},
{
  id: "llama-swap",
  name: "llama-swap",
  type: "tool",
  category: "inference",
  url: "https://github.com/mostlygeek/llama-swap",
  desc: "Dynamic multi-model switching proxy; saves effort when frequently switching models in research environments.",
},
{
  id: "gpustack",
  name: "GPU-Stack",
  type: "platform",
  category: "inference",
  url: "https://github.com/gpustack/gpustack",
  desc: "Multi-GPU / multi-node inference orchestration; resource management for lab multi-card environments.",
},
{
  id: "arxiv",
  name: "arXiv",
  type: "research",
  category: "academic",
  url: "https://arxiv.org",
  desc: "Preprint server; starting point for SOTA tracking (check peer-reviewed journals for accepted work).",
},
{
  id: "semantic-scholar",
  name: "Semantic Scholar",
  type: "research",
  category: "academic",
  url: "https://semanticscholar.org",
  desc: "Citation graphs and cited-by counts; 'who cited whom' analysis tool for literature reviews.",
},
{
  id: "connected-papers",
  name: "Connected Papers",
  type: "research",
  category: "academic",
  url: "https://connectedpapers.com",
  desc: "Visual citation graph for finding related papers; compresses 'find adjacent literature for one paper' from hours to minutes.",
},
{
  id: "zotero",
  name: "Zotero (with Better BibTeX)",
  type: "tool",
  category: "academic",
  url: "https://zotero.org",
  desc: "Reference management; integrates with Obsidian / VS Code; Better BibTeX makes cite keys predictable.",
},
{
  id: "overleaf",
  name: "Overleaf",
  type: "platform",
  category: "academic",
  url: "https://overleaf.com",
  desc: "Online LaTeX; collaborative editing and template library, the mainstream collaboration environment for journal submissions.",
},
{
  id: "openreview",
  name: "OpenReview",
  type: "research",
  category: "academic",
  url: "https://openreview.net",
  desc: "Public conference review records; inspect reviewer comments and rebuttal quality to understand a paper's full evaluation history.",
},
{
  id: "papers-with-code",
  name: "Papers with Code",
  type: "research",
  category: "academic",
  url: "https://paperswithcode.com",
  desc: "Links papers to implementations / benchmarks; entry point for finding open-source implementations and comparing method rankings.",
},
{
  id: "pandoc",
  name: "Pandoc",
  type: "tool",
  category: "academic",
  url: "https://pandoc.org",
  desc: "Markdown / LaTeX / DOCX conversion; primary tool for producing final manuscripts.",
},
{
  id: "git",
  name: "Git",
  type: "tool",
  category: "reproducibility",
  url: "https://git-scm.com",
  desc: "Version control foundation; commit conventions and .gitignore templates covered throughout this Playbook.",
},
{
  id: "uv",
  name: "uv",
  type: "tool",
  category: "reproducibility",
  url: "https://github.com/astral-sh/uv",
  desc: "Python package and environment management (CLI / scripts / web use); significantly faster than pip.",
},
{
  id: "conda",
  name: "conda / Miniconda",
  type: "tool",
  category: "reproducibility",
  url: "https://docs.conda.io",
  desc: "Scientific computing, ML, and CUDA dependency management; de-facto standard for cross-platform environment packaging.",
},
{
  id: "docker",
  name: "Docker / Docker Compose",
  type: "tool",
  category: "reproducibility",
  url: "https://docker.com",
  desc: "Reproducible environment packaging; entire agent workflows can be containerized, and containers are the recommended environment for supply chain isolation testing.",
},
{
  id: "devcontainer",
  name: "Devcontainer (VS Code / GitHub Codespaces)",
  type: "tool",
  category: "reproducibility",
  url: "https://containers.dev",
  desc: "Standardized development environments on cloud or local; both Anthropic and OpenAI explicitly recommend this for agent isolation.",
},
{
  id: "pytest",
  name: "pytest",
  type: "tool",
  category: "reproducibility",
  url: "https://pytest.org",
  desc: "Python testing framework; pair with pytest-cov to reach 80% coverage target.",
},
{
  id: "pre-commit",
  name: "pre-commit",
  type: "tool",
  category: "reproducibility",
  url: "https://pre-commit.com",
  desc: "Gate lint / type-check / format checks before commit; enforces the minimum quality bar for committed code.",
},
{
  id: "supabase",
  name: "Supabase / pgvector",
  type: "platform",
  category: "platform",
  url: "https://supabase.com",
  desc: "Backend + vector database; the most common path for self-hosted RAG, open-source and self-hostable.",
},
{
  id: "minio",
  name: "MinIO",
  type: "platform",
  category: "platform",
  url: "https://min.io",
  desc: "S3-compatible object storage; self-hosted data lake for agent workflow large-file storage.",
},
{
  id: "cloudflare",
  name: "Cloudflare (Workers, Tunnels, Zero Trust, WAF, DNS, R2)",
  type: "platform",
  category: "platform",
  url: "https://cloudflare.com",
  desc: "Edge compute and zero-trust networking; low-cost option for individuals and small teams running public-facing services.",
},
{
  id: "tailscale",
  name: "Tailscale",
  type: "platform",
  category: "platform",
  url: "https://tailscale.com",
  desc: "Zero-config mesh VPN; self-hosted cross-machine agent networking, effortless setup for multi-node lab environments.",
},
{
  id: "n8n",
  name: "n8n",
  type: "platform",
  category: "platform",
  url: "https://n8n.io",
  desc: "Visual workflow orchestration; API chaining accessible to non-engineers, open-source and self-hostable.",
},
{
  id: "langgraph",
  name: "LangGraph",
  type: "tool",
  category: "platform",
  url: "https://github.com/langchain-ai/langgraph",
  desc: "Agent flows as stateful graphs; designed for complex multi-step tasks.",
},
]}
/>

***

## Standard SOP for using community resources

<Note>
  When you encounter a popular Skill / Plugin / MCP server, follow these seven steps:

  1. **Source review**: Is the author named? What organization? How long since the last commit? Is the issue tracker active?
  2. **File review**: Read `SKILL.md` / `plugin.json` / `.mcp.json` / `hooks.json` in full. Do the first 50 lines contain suspicious commands or outbound connections?
  3. **Permission review**: Does it write files? Connect to the network? Require a token? Does the task actually need any of that?
  4. **Isolated test**: Install it first in a throwaway environment or container, run one empty task, and observe network and file behavior.
  5. **Scan**: Run the three `rg` scans from the security tools section. Do not skip any hit.
  6. **Track**: Follow the author's releases. Re-run all five steps before upgrading.
  7. **Document**: Write the review findings into `MEMORY.md` or project documentation. When a colleague asks whether it is safe to install, hand them the record directly.
</Note>

***

## Related units

* Evaluation framework (why star counts are not enough): [03-1 How to evaluate whether a tool or skill fits](/en/code-agent/judgment/fit-evaluation), [03-2 Beyond GitHub stars](/en/code-agent/judgment/beyond-github-stars)
* Supply-chain security SOP: [03-3 Security, privacy, and supply-chain risk](/en/code-agent/judgment/security-privacy-supply-chain)
* Personal benchmark: [03-4 Building a personal benchmark](/en/code-agent/judgment/personal-benchmark)
* Configuration locations: [Appendix A: Settings cheatsheet](/en/code-agent/appendix/settings-cheatsheet)
* Security checklist: [Appendix B: Privacy and security settings checklist](/en/code-agent/appendix/privacy-security-checklist)
* Cross-tool rules files: [02-6 Other tools comparison](/en/code-agent/configuration/other-tools-comparison)
* MCP integration: [04-9 Cross-tool integration and MCP](/en/code-agent/customization/mcp-integration)
* CLI-first: [04-10 CLI-first vs MCP](/en/code-agent/customization/cli-first-vs-mcp)
* Glossary: [Appendix C: Glossary](/en/code-agent/appendix/glossary)
