## 1. Project Overview & Quickstart (langchain-ai/streaming-advanced)

# Technical Documentation: langchain-ai/streaming-advanced

> ℹ️ **Provenance:** Multi-Tier Ingestion · [CodeWiki Reference](https://codewiki.google/github.com/langchain-ai/streaming-advanced)

# streaming-advanced

### Agent Skills & Rules
- Discovered 21 agent rule(s) and prompt configurations.



--- METRICS ---
- Files Extracted: 1
- Estimated Token Budget: ~27 tokens
- Canonical Reference: https://codewiki.google/github.com/langchain-ai/streaming-advanced


## 2. Official Technical Reference & Guides (langchain-ai/docs)

## File: README.md

# LangChain Docs

🦜 **Welcome!** This repository contains the documentation build pipeline for LangChain projects.

* 🏠 [`docs.langchain.com`](https://docs.langchain.com) is our docs home, centralizing documentation for LangChain, LangGraph, LangSmith, and LangChain Labs (Deep Agents, Open SWE, Open Agent Platform). This site is hosted on [Mintlify](https://mintlify.com).
* 🛠️ [`reference.langchain.com`](https://reference.langchain.com/python/) hosts generated API reference for LangChain, LangGraph, LangSmith, and integration packages. That site is **not** built from this repository (no reference build scripts or output live here).
  * [`Python reference`](https://reference.langchain.com/python/)
  * [`JavaScript/TypeScript reference`](https://reference.langchain.com/javascript/)
* 💬 [`chat.langchain.com`](https://chat.langchain.com) is an AI-powered assistant that can answer questions about LangChain documentation.

---

**Table of contents:**

- [LangChain Docs](#langchain-docs)
  - [Contribute](#contribute)
  - [Reference](#reference)
    - [Repository structure](#repository-structure)
      - [`docs.langchain.com`](#docslangchaincom)
      - [`reference.langchain.com`](#referencelangchaincom)
    - [File formats](#file-formats)
    - [Available commands](#available-commands)
  - [Linting](#linting)
    - [Codespell](#codespell)
  - [Troubleshooting](#troubleshooting)
    - [`docs dev` not working / running](#docs-dev-not-working--running)
    - [Mintlify `.venv` parsing error](#mintlify-venv-parsing-error)
    - [Warning: page doesn't exist](#warning-page-doesnt-exist)
    - [General Mintlify errors](#general-mintlify-errors)

---

## Contribute

To run a local preview of the documentation:

```bash
git clone https://github.com/langchain-ai/docs.git
```

```bash
cd docs
```

```bash
make install
```

```bash
make dev
```

For more information on how to contribute to LangChain documentation, follow the steps outlined in the [contributing guide](https://docs.langchain.com/oss/python/contributing/overview). The contributing guide also explains our documentation types and their writing and quality standards.

For detailed information about setting up your development environment and contributing to documentation, see the [documentation contributing guide](https://docs.langchain.com/oss/python/contributing/documentation).

To report issues with **reference.langchain.com** (missing pages, broken links, or generated API content), [open a reference documentation issue](https://github.com/langchain-ai/docs/issues/new?template=04-reference-docs.yml) on this repo so maintainers can route it.

## Reference

### Repository structure

```text
# --- docs.langchain.com ----------------------------------------------
build/                    # Built docs (DO NOT EDIT)
packages.yml              # Package metadata (indexes, tables, downloads; not the API reference build)
pipeline/                 # Build pipeline source code
scripts/                  # Helper scripts
src/                      # Source documentation files (< EDIT CONTENT HERE)
    langsmith/            # LangSmith docs
    oss/                  # LangChain, LangGraph, Deep Agents, and integrations docs
    docs.json             # Mintlify site configuration and navigation
tests/                    # Test files for the pipeline
Makefile                  # Build targets
pyproject.toml            # Dependencies
```

#### `docs.langchain.com`

The Mintlify docs pipeline is structured with `.mdx` source files in `/src` and build artifacts in `/build`. Mintlify deploys from the `/build` folder, which is generated by preprocessing logic.

> [!IMPORTANT]
> Never edit `/build` directly.

The `/src/docs.json` file is used to configure the Mintlify site navigation and settings. Refer to the [Mintlify documentation](https://www.mintlify.com/docs/organize/navigation) for detailed syntax and component usage.

Documentation changes follow a PR workflow where all tests must pass before merging. See the [contributing guidelines](https://docs.langchain.com/oss/python/contributing/documentation) for more details.

#### `reference.langchain.com`

API reference is generated and deployed outside this repo. Browse [Python](https://reference.langchain.com/python/) and [JavaScript/TypeScript](https://reference.langchain.com/javascript/) reference there. If something is wrong with that site, use the [reference docs issue template](https://github.com/langchain-ai/docs/issues/new?template=04-reference-docs.yml).

### File formats

* **Markdown files** (`.md`, `.mdx`) - Standard documentation content
* **Snippets** (`src/snippets/`) - Reusable MDX content that can be imported into multiple pages. **Important:** Snippets undergo special link preprocessing. When writing links in snippets, be careful about path segments.
* **Jupyter notebooks** (`.ipynb`) - Converted to markdown during build, though **these are not recommended for new content!** Your PR will likely be rejected if you attempt to add a Jupyter notebook unless asked to by a maintainer.
* **Assets** - Images and other files are copied to the build directory

### Available commands

**Make commands:**

* `make dev` - Start development mode with file watching and live rebuild
* `make build` - Build documentation to `./build` directory
* `make broken-links-with-anchors` - Check for broken links, including anchors (the check CI runs)
* `make broken-links` - Check for broken links, without anchors
* `make install` - Install all dependencies and link authoring skills
* `make clean` - Remove build artifacts
* `make test` - Run the test suite
* `make lint` - Check code style and formatting
* `make format` - Auto-format code
* `make lint_md` - Lint markdown files
* `make lint_md_fix` - Lint and fix markdown files
* `make skills` - Link `.agents/skills` into `.claude/skills` for Claude Code. Runs as part of `make install`; re-run it after new skills are added
* `make help` - Show all available commands

**`docs` CLI tool:**

The `docs` command (installed as `uv run docs`) provides additional functionality:

* **`docs migrate `** - Convert MkDocs markdown/notebook files to Mintlify format
  * `--dry-run` - Preview changes without writing files
  * `--output ` - Specify output location (default: in-place)
  * Supports `.md`, `.markdown`, `.ipynb` files

* **`docs migrate-docusaurus `** - Convert Docusaurus markdown/notebook files to Mintlify format
  * `--dry-run` - Preview changes without writing files
  * `--output ` - Specify output location (default: in-place)
  * Supports `.md`, `.markdown`, `.mdx`, `.ipynb` files
  * Converts Docusaurus-specific syntax (admonitions, tabs, imports, etc.)

* **`docs mv <old_path> <new_path>`** - Move files and update cross-references
  * `--dry-run` - Preview changes without moving files

These can be used directly using the `Makefile` or via the `docs` CLI tool:

* **`docs dev`** - Start development mode with file watching and hot reload
  * Automatically rebuilds changed files from `src/` to `build/`
  * Launches Mintlify dev server at <http://localhost:3000>
  * Provides automatic browser refresh when files change
  * `--skip-build` - Skip initial build and use existing build directory

* **`docs build`** - Build documentation files
  * `--watch` - Watch for file changes after building

## Linting

After running `make install`, you can use `make lint_prose` to ensure your writing meets our style guide rules.

`make lint_prose` installs the Vale version pinned in `.mise.toml` to `.bin/vale`, which is the same version the
`lint-prose` CI workflow uses. Bump the pin in `.mise.toml` only; the `Makefile`, `scripts/install-vale.sh`, and
the workflow all read it from there. If you already have a different `vale` on your `PATH` (from Homebrew, say),
the pinned copy in `.bin/` takes precedence, so local results match CI.

### Codespell

`make lint` runs `uv run codespell src` to check source documentation for common spelling errors.

Codespell is configured in `pyproject.toml` under `[tool.codespell]`:

* Add custom accepted words to `src/.codespellignore`. This file is referenced by `ignore-words = "src/.codespellignore"`.
* Exclude generated files, vendor content, or other paths that should not be spell checked by adding glob patterns to the `skip` setting.
* Keep skip patterns scoped. Prefer adding accepted words to `src/.codespellignore` when the word is valid documentation content, and use `skip` when the file or directory should not be checked at all.

You can also follow these steps to enable `vale` with VS Code or Cursor:

1. Install the [Vale extension](https://marketplace.visualstudio.com/items?itemName=chrischinchilla.vale-vscode) (Vale by Chris Chinchilla)
2. Install Vale CLI: `brew install vale` (macOS) or see [Vale installation](https://vale.sh/docs/install) for other platforms
3. Navigate to the Vale extension settings:
   - Set `Vale CLI: Config` to the absolute path to `.vale.ini` (in the root of this repo)
   - Set `Vale CLI: Min Alert Level` to `suggestion` (many rules are coded as suggestions)

If you cannot use the VS Code UI to configure Vale, add these settings to your `settings.json`:

```json
    "vale.valeCLI.config": "/path/to/docs/.vale.ini",
    "vale.valeCLI.minAlertLevel": "suggestion"
```

**Note:** The extension requires Vale on your `PATH`. If annotations don't appear (e.g., when Cursor is launched from the Dock), launch Cursor from a terminal so it inherits your PATH, or ensure Homebrew is in your shell profile.

## Troubleshooting

### General Mintlify errors

In some cases, we use new features that are only available in the latest Mintlify CLI. If you encounter errors, ensure you have the latest version installed:

```bash
mint update

# or

npm install -g mint
```

### `docs dev` not working / running

Re-do the [steps to set up your dev environment](https://docs.langchain.com/oss/python/contributing/documentation#set-up-local-environment), ensuring you have activated the virtual environment and installed all dependencies.

> [!IMPORTANT]
> Most of the time, `mint update` solves any `docs dev` / `make dev` issues!

### Mintlify `.venv` parsing error

**Problem**: Running `mint broken-links` or other Mintlify commands from the project root causes parsing errors like:

```txt
Unable to parse .venv/lib/python3.13/site-packages/soupsieve-2.7.dist-info/licenses/LICENSE.md
- 3:48: Unexpected character '@' (U+0040) in name
```

**Root Cause**: Mintlify tries to parse all files in the directory, including Python virtual environment files that contain invalid MDX syntax.

**Solutions** (in order of preference):

1. **Use the safe Make commands** (recommended):

   ```bash
   make broken-links-with-anchors      # Builds docs first, then checks internal links
   ```

2. **Run Mintlify commands from the build directory**:

   ```bash
   cd build               # Change to build directory where final docs are
   mint broken-links      # Now safe to run
   ```

**Why this works**: The solution ensures Mintlify commands run from the `build/` directory where the final documentation is generated, which is the correct place to check for broken links. This avoids scanning the Python virtual environment in the project root.

**Prevention**: Always use the provided Make commands instead of running raw `mint` commands from the project root.

### Offline export and `htmltest`

Use **`make export`** to run [`mint export`](https://www.mintlify.com/docs/deploy/export) from `build/` after `make build` so Python and JavaScript OSS routes match the files on disk. The default zip path is **`build/export.zip`** (Mintlify’s default filename when exporting from `build/`).

**Prerequisites for `mint export`:**

- A recent Mintlify CLI that includes `export` (`npm install mint@latest`; older CLIs report `Unknown command: export`)
- Node.js LTS **20 or 22** (Mintlify does not support Node 25+)
- An [Enterprise](https://www.mintlify.com/docs/deploy/export) Mintlify plan

If you use nvm: `nvm use 22 && npm install mint@latest`, then run `make export` from that shell.

Then run **`make htmltest`** to unpack that zip under `build/mint-export-htmltest-unpacked/` and run [htmltest](https://github.com/wjdp/htmltest) on the static HTML. Install htmltest first (for example `brew install htmltest`, or the [install script](https://github.com/wjdp/htmltest#installation)). By default it checks **external URLs only** (`htmltest-mint-export.yml`), because mint export does not emit a complete page set for reliable internal link checks. Pass extra flags via `HTMLTEST_ARGS` if needed. If you exported to a different file, set `EXPORT_ZIP` (for example `make htmltest EXPORT_ZIP=build/my-export.zip`).

**`make export-htmltest`** runs **`make export`** and then **`make htmltest`** in one go.

### Warning: page doesn't exist

If adding a new group, ensure the root `index.mdx` is included in the `pages` array like:

```json
{
  "group": "New group",
  "pages": ["new-group/index", "new-group/other-page"]
}
```

If the trailing `/index` (no extension included) is omitted, the Mintlify parser will raise a warning even though the site will still build.

---

## File: AGENTS.md

> Four files derive from this one, for agents that do not read `AGENTS.md`. When you change a section listed below, update its copies in the same PR:
>
> - **Style guide** (through Product and feature name capitalization) is mirrored verbatim in `.cursor/rules/docs-style.mdc` and `.github/instructions/docs-style.instructions.md`. Both are path-scoped to `src/**/*.mdx`, so they load only when a page is edited.
> - **Critical rules, Repository structure, Quick reference, Frontmatter, and Syntax** are summarized in `.cursorrules` and `.github/copilot-instructions.md`.

# LangChain Documentation Guidelines

Documentation for LangChain products hosted on Mintlify. These guidelines apply to manually authored content under `src/`, not Mintlify `build/` output.

## Critical rules

1. **Always ask for clarification** rather than making assumptions
2. **Never fabricate** examples, JSON snippets, policy details, or use case descriptions: use only content from the user or existing source files
3. **Never use markdown in frontmatter `description`**: breaks SEO
4. **Never edit `build/`**: Mintlify build output (regenerate with `make build` or `make dev`)
5. **Always update `src/docs.json`** when adding new pages
6. **Use Tabler icons only**, not FontAwesome
7. **Test code examples** before including them

## Quick reference

| What | Where/How |
|------|-----------|
| LangSmith docs | `src/langsmith/` |
| Open source docs | `src/oss/` (LangChain, LangGraph, Deep Agents) |
| Python integrations | `src/oss/python/integrations/` |
| JS integrations | `src/oss/javascript/integrations/` |
| Reusable snippets | `src/snippets/` |
| Images | `src/images/` |
| Provider icons | `src/images/providers/` |
| Navigation config | `src/docs.json` |
| Build system | `pipeline/` |
| Icon library | Tabler: <https://tabler.io/icons> |
| Mintlify components | <https://mintlify.com/docs/components> |
| API reference site | [reference.langchain.com](https://reference.langchain.com/python/). Built outside this repo. [Report reference docs issues](https://github.com/langchain-ai/docs/issues/new?template=04-reference-docs.yml) |
| Mintlify MCP server | `npx add-mcp https://www.mintlify.com/docs/mcp` |
| Authoring skills | `.agents/skills/` (run `make skills` for Claude Code) |

## Skills

Task-specific procedures live in `.agents/skills/`, one directory per skill.
Cursor, Codex, GitHub Copilot, Gemini CLI, OpenCode, and Deep Agents read that
path directly. Claude Code reads `.claude/skills/` only, so run `make skills`
once to link the tree, and again in each new git worktree.

| Skill | Use it for |
|-------|-----------|
| `add-docs-page` | Adding, moving, renaming, or deleting a page: directory choice, frontmatter, `src/docs.json` navigation, redirects, verification. |
| `docs-edit` | Editing a page that already has an open PR: checking out that PR's own branch, forked PRs, reading the real diff, checking the edit against related pages. |
| `docs-restructure` | Splitting a page that grew too long, moving sections between pages, retiring a page, or a topic documented in two places: the duplication map, choosing one owner, cutting rather than relocating. |
| `docs-team-voice` | Drafting or revising prose in the house voice: sentence length, cross-link density, stating defaults, the revision pass. |
| `docs-review` | Reviewing changed prose against Vale and the style guide, reporting the rule each finding breaks. `add-docs-page` invokes it before committing. |
| `open-docs-pr` | Opening a PR for finished changes: branching from the latest `origin/main`, the lint and link gates, the commit, the short PR description with its AI disclosure line, pushing, and watching checks. |
| `docs-tooling-notion` | Recording new or changed tooling on the internal Notion pages: which page owns the topic, and how to edit safely. Required whenever a PR adds or changes a script, workflow, or check. |
| `docs-code-samples` | Moving inline MDX code blocks into external, testable sample files. |
| `verify-against-source` | Checking that a code sample, signature, default, or behavior claim is true: which repository owns each product, how to reach the private ones, and naming what stayed unverified. |
| `submit-integration` | Turning a structured integration issue submission into a listing. Invoked by CI. |
| `update-integrations-prs` | Processing open integration PRs against the featuring policy. |

Invoke a skill when the task matches it. Adding or changing tooling (a script,
a workflow, a Makefile target, a PR check, a scheduled job, or a skill) also
carries a documentation step: invoke `docs-tooling-notion` before handing off
the pull request, whether or not anyone asked for it. This file holds the rules
that apply to every task; a skill holds the procedure that only some tasks need,
so skills link back here rather than restating these rules. See
[`.agents/skills/README.md`](.agents/skills/README.md) for how to add one.

## Project structure

This project uses Mintlify for documentation. Key files: `src/docs.json` (navigation + site config), MDX files with YAML frontmatter for page metadata. When making multi-file docs changes, always update `src/docs.json` navigation and any redirect mappings. Custom CSS lives in `src/style.css`.

```txt
docs/
├── src/                        # All manually authored content
│   ├── docs.json               # Mintlify config + navigation
│   ├── index.mdx               # Home page
│   ├── style.css               # Custom CSS
│   ├── langsmith/              # LangSmith product docs
│   │   └── fleet/              #   Fleet (nav label: "No-code agents")
│   ├── oss/                    # Open source docs
│   │   ├── langchain/          #   LangChain framework
│   │   ├── langgraph/          #   LangGraph framework
│   │   ├── deepagents/         #   Deep Agents
│   │   │   └── code/           #     Deep Agents Code (unversioned, no language split)
│   │   ├── openwiki/           #   OpenWiki (unversioned, no language split)
│   │   ├── python/             #   Python-specific (integrations, migrations, releases)
│   │   ├── javascript/         #   TypeScript-specific (integrations, migrations, releases)
│   │   ├── integrations/       #   Shared integration content
│   │   ├── concepts/           #   Conceptual overviews
│   │   ├── contributing/       #   Contribution guides
│   │   └── reference/          #   Reference tab entry pages (link to reference.langchain.com)
│   ├── snippets/               # Reusable MDX snippets
│   │   ├── langsmith/          #   LangSmith snippets
│   │   ├── oss/                #   OSS snippets
│   │   └── code-samples/       #   Embedded code samples
│   ├── images/                 # Documentation images
│   │   ├── brand/              #   Logos, favicons
│   │   └── providers/          #   Provider icons (dark/ and light/ variants)
│   ├── code-samples/           # Testable standalone code samples (see make test-code-samples)
│   └── fonts/                  # TWK Lausanne font files
├── pipeline/                   # Python build system & preprocessors
├── build/                      # Build output, do not edit
├── scripts/                    # Helper utilities and automation scripts
└── tests/                      # Pipeline tests
```

## Navigation map

Navigation is defined in `src/docs.json`. The site has 2 products, each a `menu` of items rather than a flat tab list. When adding pages, find the correct product → menu item → tab → group below, then update the matching section in `docs.json`.

Product and menu names in `docs.json` do not match source directory names. Lifecycle stages mix LangSmith and OSS content: the Build menu draws from both `src/oss/` and `src/langsmith/`, and Test, Deploy, and Monitor all draw from `src/langsmith/`. Locate pages by directory, not by product name.

### AGENT DEVELOPMENT LIFECYCLE

Five menu items: Home, Build, Test, Deploy, Monitor.

#### Home

Single page (`src/index.mdx`).

#### Build

Two language dropdowns (Python, TypeScript) with the same 10 tabs each. Most content is language-versioned from `src/oss/`; two tabs are exceptions.

| Tab | Source | Groups |
|-----|--------|--------|
| Overview | `src/build-overview.mdx` | Single page |
| Managed Deep Agents | `src/langsmith/managed-deep-agents*.mdx` | Get started, Agent definition (Channels), Build and deploy |
| Deep Agents | `src/oss/deepagents/` | Get started, Deployment (Going to production), Execution environment, Context management, Delegation, Steering, Frontend (Patterns), Protocols |
| LangChain | `src/oss/langchain/` | Get started, Core components, Middleware, Frontend (Patterns → Generative UI, Integrations), Advanced usage (Multi-agent), Agent development (Test), Production |
| LangGraph | `src/oss/langgraph/` | Get started, Capabilities, Production, Frontend, LangGraph APIs (Graph API, Functional API) |
| OpenWiki | `src/oss/openwiki/` | Modes, Integrations, Search and link, Visualize, CLI reference, Customize, Providers, Automate updates, Changelog |
| Integrations | `src/oss/python/integrations/` or `src/oss/javascript/integrations/` | Python: Popular Providers, Integrations by component. TypeScript: Popular Providers (OpenAI, Anthropic, Google, AWS, Microsoft), General integrations, RAG integrations |
| Learn | `src/oss/` (various) | Tutorials (Managed Deep Agents, Deep Agents, LangChain, Multi-agent, LangGraph), Conceptual overviews, Additional resources. TypeScript adds LangChain Academy |
| Reference | `src/oss/reference/` | Reference, Releases (Releases, Migration guides), Policies; short entry pages linking to reference.langchain.com |
| Contribute | `src/oss/contributing/` | Contribute (Integrations) |

Two Build tabs are not language-versioned in the usual way:

- **Managed Deep Agents** lives in `src/langsmith/`, not `src/oss/`. Files named `managed-deep-agents*.mdx` emit only language-prefixed routes (`/langsmith/python/...` and `/langsmith/javascript/...`). The unversioned `/langsmith/managed-deep-agents*` URLs redirect to the Python routes via `docs.json`.
- **OpenWiki** ships one set of pages at `/oss/openwiki/...` with no language split. Conditional fences resolve against the Python branch.

#### Test

Six tabs, all files flat in `src/langsmith/`:

| Tab | Groups |
|-----|--------|
| Get started | No groups |
| Datasets & Experiments | Datasets (Create a dataset), Run an evaluation, Evaluation techniques (Define evaluation target, Scoring methods, Experiment configuration, Multimodal evaluations), Analyze experiment results, Tutorials, Common data types |
| Evaluators | Evaluator types (UI, SDK), Frameworks & integrations, Improve evaluators |
| Annotation Queues | Feedback |
| Test from Playground | No groups |
| Test from Studio | No groups |

#### Deploy

Six tabs, all files flat in `src/langsmith/`:

| Tab | Groups |
|-----|--------|
| Get started | Deployment components, Develop & test, Frameworks and platforms (Full-stack web apps), Reference (Agent Server API, Control Plane API, Related) |
| Agent Server | Develop your application (Set up dependencies, Persistence), Capabilities (Assistants, Runs, Double-texting), How to build, Auth & access control (Custom auth tutorial), Server customization (Replace built-in backends, Extend the HTTP server, Headers and logging) |
| Deploy to Cloud | Deployment guide, Reference |
| Deploy to Self-hosted | Configure, Reference |
| Prompt & Context Hub | Prompts (Create and manage prompts, Connect to models), Context Hub, Tutorials |
| Sandboxes | No groups |

The Get started tab's Reference group holds two OpenAPI-generated sections. See [Reference docs](#reference-docs) below.

#### Monitor

Five tabs, all files flat in `src/langsmith/`:

| Tab | Groups |
|-----|--------|
| Overview | Single page |
| Trace | Tracing setup (Integrations → LLM providers, Agent frameworks, Voice AI frameworks, Developer tools, Productivity; Manual instrumentation), Configuration & troubleshooting (Project & environment settings, Advanced tracing techniques, Data & privacy, Troubleshooting guides) |
| Debug | Viewing & managing traces, Bulk export trace data, Trajectory view, Data type reference |
| Observe | Monitoring & alerting, Online evaluators, Automations |
| Reference | SmithDB SDK migration, LangSmith REST API |

The Reference tab's LangSmith REST API group is OpenAPI-generated. See [Reference docs](#reference-docs) below.

### PRODUCTS AND SETUP

Five menu items. Only LangSmith setup has tabs; the rest are flat group lists.

#### LangSmith setup

Six tabs, all files flat in `src/langsmith/`:

| Tab | Groups |
|-----|--------|
| Overview | Hosting, Agent-based workspaces |
| Account | Billing & usage |
| Cloud | Reference |
| BYOC | No groups |
| Self-hosted | Get started by cloud provider, Deploy with Terraform (AWS, GCP, Azure), Install an instance (Additional features → Enable Sandboxes), Configure an instance, Connect external services, Platform auth & access control, SmithDB, Manage an instance, Self-hosted observability, Hybrid, Scripts, Reference |
| Govern | Organization (Workspace setup), Users & access control, Tools, Auditing, Data & compliance, Additional resources (FAQ) |

#### Other menu items

| Menu item | Source | Groups |
|-----------|--------|--------|
| LLM Gateway | `src/langsmith/llm-gateway*.mdx` | Core capabilities, Administration and governance, Advanced |
| No-code agents | `src/langsmith/fleet/` | Get started, Configure, Tools and automation, Advanced, Additional resources |
| Engine | `src/langsmith/engine*.mdx` | No groups |
| Deep Agents Code | `src/oss/deepagents/code/` | Configuration |

"No-code agents" is the nav label for Fleet. The source directory and URLs still use `fleet`.

"Deep Agents Code" ships one set of pages at `/oss/deepagents/code/...` with no language split, even though it sits under `src/oss/deepagents/`. Conditional fences resolve against the Python branch.

### Source directory summary

Because nav names and directories diverge, use this to go from a file to its place in the nav:

| Source | Appears under |
|--------|---------------|
| `src/index.mdx` | Lifecycle → Home |
| `src/oss/deepagents/` (except `code/`) | Build → Deep Agents |
| `src/oss/deepagents/code/` | Products and setup → Deep Agents Code |
| `src/oss/langchain/` | Build → LangChain |
| `src/oss/langgraph/` | Build → LangGraph |
| `src/oss/openwiki/` | Build → OpenWiki |
| `src/oss/{python,javascript}/integrations/` | Build → Integrations |
| `src/oss/reference/` | Build → Reference |
| `src/oss/contributing/` | Build → Contribute |
| `src/langsmith/managed-deep-agents*.mdx` | Build → Managed Deep Agents |
| `src/langsmith/fleet/` | Products and setup → No-code agents |
| `src/langsmith/agents.mdx`, `agent-environments.mdx`, `navigate-agents.mdx`, `create-an-agent.mdx`, `build-an-agent.mdx`, `deploy-to-agent-environment.mdx` | Products and setup → LangSmith setup → Overview → Agent-based workspaces |
| `src/langsmith/*.mdx` (everything else) | Test, Deploy, Monitor, or LangSmith setup, depending on subject |

### Reference docs

Three OpenAPI-generated sections. Mintlify generates the endpoint pages at deploy time, so they do not exist in the local `build/` output. `make broken-links-with-anchors` filters them as false positives.

| Section | Nav location | Spec source | Generated under |
|---------|--------------|-------------|-----------------|
| Agent Server API | Deploy → Get started → Reference | `src/langsmith/agent-server-openapi.json` (committed) | `/langsmith/agent-server-api/` |
| Control Plane API | Deploy → Get started → Reference | `https://api.host.langchain.com/openapi.json` (fetched at deploy time, no local file) | `/api-reference/` |
| LangSmith REST API | Monitor → Reference | `src/langsmith/langsmith-platform-openapi.json` (committed) | `/langsmith/smith-api/` |

`src/langsmith/langsmith-platform-openapi.json` is refreshed daily by `.github/workflows/refresh-langsmith-openapi.yml`, which runs `scripts/process_langsmith_openapi.py` and opens or appends to a standing `chore/refresh-langsmith-openapi` PR. Do not edit it by hand.

`src/langsmith/agent-server-openapi.json` is updated by PRs from the `langgraph-api` repository, titled `Update Agent ServerOpenAPI spec for API version X.Y.Z`. Validate either spec with `make check-openapi`.

## Local development

See [Contributing to documentation](/oss/contributing/documentation) for setup instructions.

### Command-line tools

Two distinct binaries drive local work. Do not assume `mint` is the only command just because the `Makefile` targets shell out to it: `docs` is a first-class, preferred entry point installed separately via Python:

- **`docs`**: The primary CLI, a Python console script (`docs = "pipeline.cli:main"` in `pyproject.toml`) installed into the virtualenv by `uv sync` (the first step of `make install`). Provides `docs dev`, `docs build`, `docs migrate`, and `docs mv`. The `make` targets wrap this CLI. If `docs` is not found after `make install`, relaunch your shell (or activate the venv) so `.venv/bin/docs` lands on `PATH`.
- **`mint`**: Mintlify's CLI, a separate global npm binary (`npm install mint@latest`). The build targets shell out to it for `mint dev`, `mint broken-links`, and `mint export`.

## Frontmatter

Every MDX file requires:

```yaml
---
title: Clear, concise page title
description: SEO summary, no markdown allowed (no links, backticks, formatting)
---
```

**Integration page descriptions:** `"Integrate with the ClassName type using LangChain Python."`

- Example: `"Integrate with the ChatOpenAI chat model using LangChain Python."`

## Syntax

### Language-specific content

Use `:::python` or `:::js` fences for language-specific content. Every shared page under `src/oss/` builds a Python and a JavaScript version, and the fences decide what each version keeps.

A shared page listed in only one language's navigation in `src/docs.json` builds only that language. To make a page Python-only, list it only in the Python nav, and add a `docs.json` redirect for the JavaScript URL if that URL was ever published. Pages listed in both navs, or in neither, build both versions.

```txt
:::python
Python-only content here
:::
```

### Code highlighting

```python
highlighted = True  # [!code highlight]
added = True        # [!code ++]
removed = True      # [!code --]
```

### API reference links

Use `@[ClassName]` to auto-link to API docs. Defined in `pipeline/preprocessors/link_map.py`.

**Use for:** First mention of SDK classes/methods (`@[ChatOpenAI]`, `@[StateGraph]`, `@[create_agent]`)

**Don't use for:** Repeated mentions, general concepts, or when a descriptive link is clearer

## Assets

**Images:** Store in `src/images/`. Use descriptive filenames and alt text.

**SVG text:** Keep labels as native `<text>` when sharpness at reading size matters. Mintlify CLI 4.2.671 strips `<text>` and `` from plain MDX; use a named-export JSX snippet for native SVG rendering, as in `src/snippets/sandbox-diagram.jsx`. Reference only trusted local assets, and compare the result at the actual docs column width rather than only in an enlarged viewer.

**Icons:** Use Tabler names only (`icon="home"`, `icon="brand-github"`). For missing icons, use SVG path: `icon="/images/providers/name.svg"`

Common Tabler names: `home` (not house), `tool` (not wrench), `player-play` (not play), `bulb` (not lightbulb), `alert-triangle` (not exclamation-triangle)

## Components

| Component | Use for |
|-----------|---------|
| `<Tabs>` / `<Tab>` | Python/JS examples |
| `<Steps>` / `<Step>` | Numbered instructions |
| `<Accordion>` | Collapsible content |
| `<CodeGroup>` | Tabbed code blocks |
| `<Card>` / `<CardGroup>` | Navigation/overview links only (not for highlighting points) |
| `<Note>`, `<Tip>`, `<Warning>`, `` | Callouts |
| `` | Copyable AI-assistant prompt. **Required at the top of every migration guide** |

### Migration guide convention

Every migration guide (any page under `src/oss/python/migrate/` or `src/oss/javascript/migrate/`) **must** include a `` component as the very first element after the frontmatter and any import statements. The prompt should be a complete, paste-ready instruction that an AI coding assistant can use to perform the migration automatically.

Minimal template:

```mdx
<Prompt
    description="Short one-line description of the migration."
    icon="arrow-right"
    actions={["copy"]}
>
Migrate this codebase from `old-package` to `new-package` (requires `new-package>=x.y.z`).

Key changes:

1. ...
2. ...

Search the codebase for all usages of `OldClass`, `old_function`, and imports from `old_module`, and apply the necessary changes. Flag anything that cannot be migrated automatically.
</Prompt>
```

The prompt must cover every API rename, import path change, behavioral difference, and removed feature that the page documents. End with an explicit instruction to search and flag.

### Version-added admonitions

When documenting new features, APIs, or behavior that requires a minimum package or CLI version, add a version-added admonition near the first mention of the feature. Use a `<Note>` callout with a concise requirement, for example: `Feature name requires \`package>=x.y.z\`.` For a CLI, runtime, or chart version, use the prose form instead ("Feature name requires Codex CLI v0.153.4 or later."). See [Version requirements](#version-requirements).

For language-specific requirements, wrap the note in the relevant `:::python` or `:::js` fence. Include separate notes when Python and TypeScript packages have different minimum versions.

## Mermaid diagram styling

Use these `classDef` colors (from LangChain brand palette) for all mermaid diagrams. See `.github/brand-guidelines.md` for the full brand color reference.

| Role | classDef value |
|------|---------------|
| **process** (blue) | `fill:#E5F4FF,stroke:#006DDD,stroke-width:2px,color:#030710` |
| **trigger** (green) | `fill:#F6FFDB,stroke:#6E8900,stroke-width:2px,color:#2E3900` |
| **decision** (purple) | `fill:#FDF3FF,stroke:#7E65AE,stroke-width:2px,color:#504B5F` |
| **output** (plum) | `fill:#EBD0F0,stroke:#885270,stroke-width:2px,color:#441E33` |
| **alert** (peach) | `fill:#F8E8E6,stroke:#B27D75,stroke-width:2px,color:#634643` |
| **neutral** (muted blue) | `fill:#F2FAFF,stroke:#40668D,stroke-width:2px,color:#2F4B68` |

When using `%%{init}%%` theme variables, use: `lineColor:'#40668D'`, `primaryColor:'#E5F4FF'`, `primaryTextColor:'#030710'`, `primaryBorderColor:'#006DDD'`.

Do not use Tailwind default colors, Material Design colors, or other off-brand palettes in mermaid diagrams.

## Style guide

Follow [Google Developer Documentation Style Guide](https://developers.google.com/style).

**Do:**

- Match existing conventions in the file you are editing: do not restructure, combine, or split pages unless explicitly asked
- Reference existing pages for style patterns when creating new content
- Be concise: cut filler words and wordy phrases ("to" not "in order to", "because" not "due to the fact that", "can" not "has the ability to")
- Second-person imperative present tense ("Run the following code…")
- Active voice ("The function returns a list" not "A list is returned by the function")
- Sentence-case headings starting with active verb, not gerund ("Add a tool" not "Adding a tool")
- American English spelling
- Oxford commas in lists ("traces, datasets, and experiments")
- Descriptive link text ("[View the tracing docs](/langsmith/tracing)" not "click [this link](/langsmith/tracing)")
- Add cross-links where applicable
- Use `@[ClassName]` link map for API references
- Use `:::python`/`:::js` fencing on OSS docs
- Language tags on all code blocks (use actual language, not `output`)
- Sort imports in all code snippets (stdlib, third-party, local)
- Use `.content_blocks` instead of `.content` when accessing message content in LangChain code snippets
- Test code examples and links before publishing

**Don't:**

- Skip frontmatter
- Use absolute URLs for internal links
- Use markdown in description fields
- Use `/python/` or `/javascript/` in links (resolved by build pipeline)
- Use model aliases: use full identifiers (e.g., `claude-sonnet-4-6`)
- Use `>=` in prose for version minimums: write "v0.153.4 or later"; reserve `>=` for package specifiers in code (`langsmith>=0.3.13`)
- Use "→" to separate UI navigation steps: write "Go to **Settings** > **API Keys**"
- Use FontAwesome icon names
- Use nested double quotes in component attributes: use `default="['a', 'b']"` not `default='["a", "b"]'`
- Use contractions ("do not" not "don't", "cannot" not "can't", "it is" not "it's")
- Use first person ("we", "I", "our", "let's"): write in second person or use the product name as subject
- Use future tense ("The function returns X" not "The function will return X")
- Use weasel words or filler (avoid "simply", "easily", "just", "very", "basically", "obviously")
- Use H5 or H6 headings
- Start headings with articles ("Add a tool" not "The tool setup guide")
- Use em dashes: prefer commas, colons, or separate sentences instead. Only use an em dash when no alternative reads naturally
- Add spaces around em dashes: write `word—word` not `word — word` (`make lint_prose` enforces this)
- Use excessive bold/italics in body text
- Start bulleted list items with a lowercase letter: always capitalize the first word
- Include "key features" lists
- Use horizontal lines (`---`) to separate sections: use headings instead
- Apply bold to UI element names unless existing docs already do so
- Misspell product names: use "prebuilt" (not "pre-built"), "Deep Agents" (not "DeepAgents"), "PyPI" (not "PyPi"), "URL" (not "url")
- Skip `make lint_prose`: always run it on changed files before committing and fix all violations

### Structure conventions

Match these patterns, drawn from established pages, when authoring new content:

- **Open with definition, then benefit, then task**: start a section (and the page) with a one-sentence statement of what the feature is or does, follow with a sentence on what it enables for the reader, then give the procedure or detail. When a page has a sibling variant (for example, a paid or self-hosted version), link it in the opening lines.
- **Introduce procedures with a colon lead-in**: precede steps with a phrase such as "To add a channel:", then a numbered list (or the `<Steps>` component) of imperative steps. State a step's result as a follow-on line when it matters ("The Add User modal displays."). Flag optional steps inline with "(Optional)". For long, multi-stage tasks, use `### Step N. <verb>` headings.
- **Use bold-led definition lists for options**: for parameters, permissions, secrets, or enumerated types, write `- **Term**: Explanation.` and end each explanation with a period.
- **Link on first mention, and point forward at section ends**: link a feature, class, or term on first mention only, not on repeats. Two pointer forms are established, and neither is canonical, so do not mass-convert one into the other. Use the long form ("For more information, see [Page](/path)") at section ends and for standalone pointers. Use the short form ("See [Page](/path)") where the pointer trails an already-complete thought, such as an FAQ answer or a table cell, and especially in a run where nearly every item ends in a pointer. Close substantial pages with a `## See also` list of related links.
- **State requirements and constraints up front**: put permission, plan tier, or preview requirements before the steps they govern ("Adding MCP servers requires admin permissions."). Write hard constraints as plain facts ("Once an agent identity is set, it cannot be changed.").

### Model references

Always use the latest generally available (GA) models when referencing LLMs in docstrings and illustrative code snippets. Avoid preview or beta identifiers unless the model has no GA equivalent. Outdated model names signal stale code and confuse users.

Before writing or updating model references, verify current model IDs against the provider's official docs. Do not rely on memorized or cached model names. They go stale quickly.

### Version requirements

Write version minimums as "<version> or later" in prose. Reserve `>=` for package specifiers, where it is literal install syntax and belongs in backticks.

- Tools, CLIs, runtimes, servers, and Helm charts: "Codex CLI v0.153.4 or later", "Node.js 22.x or later", "Helm chart version 0.12.33 or later".
- Package specifiers: `langsmith>=0.3.13`, `langchain>=1.0.0`. Readers paste these into an install command, so keep the operator.

Keep a `v` prefix when the page or the upstream project already uses one. Do not add one to a package specifier. When another requirement follows the version, set it off with a comma so it does not read as part of the constraint ("v0.153.4 or later, with plugin hooks enabled").

This rule covers version numbers only. Leave `>=` as is in numeric parameter constraints ("Must be >= 0") and in comparison-operator reference tables.

### Navigation paths

Separate UI navigation steps with a greater-than sign surrounded by spaces, not an arrow: "Go to **Settings** > **API Keys**". Bold the UI labels, either individually (`**Settings** > **API Keys**`) or as a single span (`**Settings > API Keys**`), and match whichever form the page already uses. Vale enforces this as `LangChain.NavPathArrows`.

The arrow character stays where it does not mark navigation: mermaid diagrams, data flow (`browser or client → data plane`), API renames in migration guides (`create_react_agent` → `create_agent`), state progressions, and UI labels that literally contain an arrow ("Manage app access →").

### Release stage names

LangSmith ships features through three release stages: alpha, beta, and generally available (GA). See [Release stages](/langsmith/release-stages) for what each stage means.

These are common nouns, not proper nouns. Write them lowercase in prose, including parenthetical and inline status markers:

- Lowercase mid-sentence and in markers: "available in beta", "is in beta", "(beta)", "the feature is in alpha".
- Capitalize only where normal sentence case requires it: the first word of a sentence or heading ("Beta is optional.", "## Beta").
- Keep the literal product UI label capitalized when quoting it as a tag: the `Beta` tag, frontmatter `tag: "Beta"`. The same applies to a stage name standing alone as a table cell's only label.
- Spell out "generally available" on first use, then use "GA". GA is always uppercase.
- Do not change code identifiers, package version identifiers (`1.0.0b1`), or literal CLI output that contains "Beta".

### Product and feature name capitalization

Capitalize a word when it refers to a **product or brand name**. Use lowercase when it refers to a **common noun**: a thing you build, an instance, or a type.

**Capitalize** product and brand names:

- LangChain, LangGraph, LangSmith, Deep Agents, Fleet, Engine

**Lowercase** common nouns (things you create, instances, or types):

- "Create a dashboard" (dashboard = a thing you build, not a product name)
- "a deep agent created using Deep Agents" (the first "deep agent" is a common noun; "Deep Agents" is the product name)
- "Run an experiment", "View your traces", "Manage your projects"
- "Build agents across the agent development lifecycle" (the lifecycle is a process, not a product; marketing materials capitalize it, docs do not)
- "LangChain provides the open agent engineering platform" (the phrase describes what LangChain provides; it is not a product name)

When in doubt, ask: is this word the product's proper name, or is it describing a thing the user creates or works with? If the latter, use lowercase.

Spell out "agent development lifecycle" in prose. Do not use the "ADLC" acronym, which appears in marketing materials but not in the documentation.

Reserve "the platform" for LangSmith. LangChain is the open agent engineering ecosystem, not a platform. Marketing's short blurb ("an open agent engineering platform") compresses the whole company into a single noun to fit the character limits of a search result. Docs have the room to be precise, so do not carry that phrasing onto pages.

## Adding pages

1. Create MDX file with required frontmatter in the correct directory (see navigation map above)
2. Update `src/docs.json` to add the page to the correct product → tab → group
3. For new groups, include an index page: `"pages": ["group/index", "group/page"]`

### Common workflows

**Add a new LangSmith doc:**

1. Create `src/langsmith/<name>.mdx` with frontmatter
2. Decide which lifecycle stage the page belongs to, then find the matching menu item in `src/docs.json`: `navigation.products[0].menu` holds Home, Build, Test, Deploy, and Monitor; `navigation.products[1].menu` holds LangSmith setup, LLM Gateway, No-code agents, Engine, and Deep Agents Code
3. Add the page path (e.g., `"langsmith/<name>"`) to the correct group's `pages` array

**Add a new integration page (Python):**

1. Create `src/oss/python/integrations/<component>/.mdx`
2. Add the page to the component's index page (`src/oss/python/integrations/<component>/index.mdx`); only edit `src/docs.json` when creating a brand-new component group
3. Use description format: `"Integrate with the ClassName type using LangChain Python."`
4. If the provider has an overview page at `src/oss/python/integrations/providers/.mdx`, add or update a section there linking to the new page (`/oss/integrations/<component>/`)

**Add a new integration page (TypeScript):**

1. Create `src/oss/javascript/integrations/<component>/.mdx`
2. Add the page to the component's index page (`src/oss/javascript/integrations/<component>/index.mdx`); only edit `src/docs.json` when creating a brand-new component group
3. If the provider has an overview page at `src/oss/javascript/integrations/providers/.mdx`, add or update a section there linking to the new page (`/oss/integrations/<component>/`)

**Availability callouts on agent-based workspace pages:** every page in the
`Agent-based workspaces` group opens with the shared
`/snippets/langsmith/agent-availability-note.mdx` callout, placed after the
page's opening definition and before the first `##` heading. Do not hand-write
a per-page variant. Agent-based workspaces are available on LangSmith Cloud
and not on self-hosted, so do not label them beta or add a `Beta` tag to the
group or its pages.

**Add a reusable snippet:**

1. Create `src/snippets//<name>.mdx`
2. Import it below the frontmatter of the consuming page: `import PascalCaseName from '/snippets//<name>.mdx';`
3. Render it where the content belongs: ``

Use the import form, not Mintlify's `<Snippet file="..." />`. The build pipeline rewrites snippet imports to language-specific copies under `/snippets/{python,javascript}/` (`_rewrite_snippet_imports_for_language` in `pipeline/core/builder.py`), and that rewrite only matches `from '/snippets/...'` imports. Every snippet reference in `src/` uses the import form.

## Debugging

When investigating a bug or unexpected behavior, always start by reading the relevant code and logs before forming a hypothesis. Do not assume something is working or ask the user to confirm. Verify it yourself first.

### CI broken-links failures

`make broken-links-with-anchors` runs `mint broken-links --check-anchors --check-redirects`, the same check CI runs, then filters known false positives (OpenAPI-generated pages: `/langsmith/agent-server-api/`, `/api-reference/`, `../langchain/agents`). Output format:

```txt
found N broken links in M files

some-file.mdx                    ← file header (always printed)
 ⎿  /path/to/broken-target       ← indented = actual broken link

another-file.mdx                 ← no indented lines = all its links were filtered out (false positive)
```

**Shortcut:** Skip straight to `⎿` lines: those are the only real failures. File headers without `⎿` lines beneath them are OpenAPI pages that exist at deploy time but not locally.

**Common cause:** Page renamed/deleted but link and/or `src/docs.json` nav entry still references old name. Fix both the link in the MDX file AND the corresponding entry in `docs.json`.

To run locally: `make broken-links-with-anchors`. Do not use plain `make broken-links`: it skips anchors, so it can pass locally on a link CI rejects.

## Helper scripts

### Refresh Deep Agents eval matrix

The model-by-eval-category table on `/oss/python/deepagents/models` is generated by `scripts/refresh_deepagents_category_matrix.py`. The script pulls `category_scores` from the latest successful [Evals - GHA](https://github.com/langchain-ai/deepagents/actions/workflows/evals.yml) runs in `langchain-ai/deepagents` and writes the table to `src/snippets/deepagents-eval-category-matrix.mdx` (imported by `src/oss/deepagents/models.mdx`). Run it whenever new eval results land and the published table is out of date.

Setup and run:

```bash
export GITHUB_TOKEN="$(gh auth token)"  # needs Actions: Read on langchain-ai/deepagents; SSO-authorize for langchain-ai
uv run python scripts/refresh_deepagents_category_matrix.py --write
```

Notes:

- For the latest `(model, category)` value per cell, the script walks runs newest-first and keeps the first hit. Models with fewer than four of the six fixed categories filled are dropped (`MIN_FILLED_CATEGORIES`).
- Only models explicitly listed in `INCLUDED_MODELS` (in the script) appear in the table. To surface a new model, add its `provider:model` key there.
- The fixed columns are defined by `FIXED_CATEGORY_COLUMNS` in the script (`unit_test` is intentionally excluded).
- Without `--write`, the script prints the table to stdout for inspection.
- After regenerating, commit only `src/snippets/deepagents-eval-category-matrix.mdx`. Do not edit that snippet by hand.

### Refresh the MDA OAuth catalog

The OAuth service table on `/langsmith/managed-deep-agents-connections` is generated by
`scripts/refresh_mda_oauth_catalog.py`. The catalog is compiled into the `mda` binary, so the
script reads it from the installed CLI and writes
`src/snippets/langsmith/mda-oauth-catalog.mdx` (imported by
`src/langsmith/managed-deep-agents-connections.mdx`).

```bash
uv tool upgrade --pre managed-deepagents   # output reflects the locally installed version
uv run python scripts/refresh_mda_oauth_catalog.py --write
```

Notes:

- `mda connections catalog --json` reads a compiled-in catalog, so no LangSmith API key or
  workspace ID is needed.
- Without `--write`, the script prints the table to stdout for inspection.
- After regenerating, commit only `src/snippets/langsmith/mda-oauth-catalog.mdx`. Do not edit
  that snippet by hand.

### Update the egress IP inventory

The LangSmith and LangSmith Deployment egress IP tables on `/langsmith/cloud` and
`/langsmith/cloud-platform-features` are generated from
`src/langsmith/egress-ip-addresses.json` by `scripts/generate_egress_ip_tables.py`. The JSON is
also published as-is at `/langsmith/egress-ip-addresses.json` for customers to poll.

Each address has a service (`langsmith` or `langsmith-deployment`), cloud (`gcp` or `aws`),
customer region (`us`, `eu`, or `apac`), and IPv4 `/32` CIDR. Customers must allowlist every
matching CIDR, including allocated reserves. Publish new reserves before using them. Attaching
an already-published address does not require an inventory update. Remove an address only
after it stops carrying traffic and has been released.

```bash
uv run python scripts/generate_egress_ip_tables.py           # rewrite the version and both tables
uv run python scripts/generate_egress_ip_tables.py --check   # fail if anything is stale
```

Notes:

- Commit the JSON and both generated pages together. Do not edit the generated tables or the
  `version` field by hand.
- `make test` runs the same `--check` on the committed files, so CI fails on drift.
- After deployment, verify the changes at
  [the public JSON](https://docs.langchain.com/langsmith/egress-ip-addresses.json).

### Check integration repo links

`scripts/check_integration_repos.py` scans every third-party `repo:` in `packages.yml`
against GitHub. When a repo is 404, it looks for a live alternate on PyPI, npm, and
existing `docs_url` values in `scripts/data/integration_external_docs.yaml`:

- **Rename**: different live third-party GitHub `owner/repo` found → update
  `packages.yml` (and listing hrefs that used the old URL). Never auto-retarget
  into `langchain-ai/*`.
- **Docs URL redirect**: an external `docs_url` that permanently redirects (HTTP
  301 or 308) → update that `docs_url` and matching listing hrefs (for example
  `hashlock.markets/docs` → `docs.hashlock.markets`). Temporary redirects
  (302/307) are left alone.
- **Delist**: no live GitHub, GitLab, or partner-docs home → remove the package
  from `packages.yml`, matching external YAML rows, downloads-table rows, and the
  `all_providers` card when no other package shares the provider key
  (`name_short`).
- **Attention only**: a live GitLab project or partner docs/homepage remains (for
  example Writer's `dev.writer.com` when GitHub is gone), or the only alternate
  is first-party → do not change listings; report in the evidence table.
- **Skipped**: first-party `langchain-ai/*` packages.

```bash
export GITHUB_TOKEN="$(gh auth token)"
uv run python scripts/check_integration_repos.py
uv run python scripts/check_integration_repos.py --write --evidence /tmp/evidence.md
```

The weekly workflow `.github/workflows/check-integration-repos.yml` runs this with
`--write` and opens or updates a standing **draft** PR on `chore/dead-integration-repos`.

## Pre-commit linting

Always run `make lint_prose` (Vale) before handing off or committing doc changes. CI blocks on it. Common offenders: em-dashes with surrounding spaces (` — ` → `—`, enforced by `LangChain.DashesSpaces`), terminology, style.

Scope to changed files for speed: `make lint_prose FILES="src/path/to/file.mdx"` (or pass space-separated paths). Run with no `FILES` arg to lint all of `src/`.

The Vale version is pinned once, in `.mise.toml`. The `Makefile`, `scripts/install-vale.sh`, and the `lint-prose` workflow all read it from there, so local runs use the same engine as CI. Bump it only in `.mise.toml`. Do not hardcode a version in any of the three call sites.

Also run `make broken-links-with-anchors` when adding or renaming links, pages, or nav entries.

## Changelog / Release notes

When extracting data from PRs or changelogs, use the "Release Note:" section in PR bodies, not PR titles. Always verify the data source format before processing.

## Pull requests

- Explain the "why" of changes
- Highlight areas needing careful review
- Disclose AI agent involvement as one plain sentence in the description, for example "Prepared with Claude Code."
- Do not add a `🤖 Generated with [Claude Code]` badge or similar to PR descriptions or commit messages, and do not add a `Co-Authored-By` trailer for an AI agent to commits. This aligns with the `langster-safety` skill. The `check-pr-ai-attribution` workflow fails a PR whose description contains either one, and a ruleset on `main` blocks the Claude trailer.



## OpenWiki

This repository has a generated `openwiki/` evidence index. It is optional just-in-time context, not required startup reading.

- Treat source code and tests as authoritative. A brief's unknowns and review items are verification gaps, not automatic requirements.
- Prefer the narrowest quiet validation that proves the changed behavior. Preserve complete failure output.

The scheduled OpenWiki GitHub Actions workflow refreshes the repository wiki. Do not hand-edit generated OpenWiki pages unless explicitly asked; prefer updating source code/docs and letting OpenWiki regenerate.

---

## File: htmltest-mint-export.yml

# htmltest config for mint export: external URLs only.
# Mintlify export does not emit a complete page set, so internal links are unreliable.
# See https://github.com/wjdp/htmltest

CheckExternal: true
CheckInternal: false
CheckInternalHash: false

# Content links only (<a href>). Skip <link> tags: mint export emits broken
# rel="canonical" URLs like https://docs.langchain.com/src/_props/langsmith/...
CheckAnchors: true
CheckLinks: false
CheckImages: true
CheckScripts: true
CheckMeta: true
CheckGeneric: true
CheckMetaRefresh: true

# Not external URL checks
CheckDoctype: false
CheckMailto: false
CheckTel: false
CheckFavicon: false
IgnoreAltMissing: true
# Mint export canonicals often 404; do not fail the run on them if CheckLinks is re-enabled
IgnoreCanonicalBrokenLinks: true

# Avoid hammering remote hosts / rate limits
HTTPConcurrencyLimit: 4
DocumentConcurrencyLimit: 8
ExternalTimeout: 30

IgnoreURLs:
  - "mintcdn.com"
  - "mintlify-assets"
  - "https://academy.langchain.com/"
  - "https://fonts.googleapis.com"
  - "https://fonts.gstatic.com"
  # Local / example destinations in tutorials (not reachable from CI)
  - "localhost"
  - "127\\.0\\.0\\.1"
  - "example\\.com"
  # Bot / WAF / auth-wall noise (OK in a browser; checkers get 403/405/406/202/redirect loops)
  - "npmjs\\.com"
  - "npmjs\\.org"
  - "cisco\\.com"
  - "cityofhope\\.org"
  - "morningstar\\.com"
  - "replit\\.com"
  - "uber\\.com"
  - "langchain\\.slack\\.com"
  - "slack\\.com/archives"
  - "microsoft\\.com"
  - "claude\\.ai"
  - "platform\\.deepseek\\.com"
  - "console\\.mistral\\.ai"
  - "auth\\.mistral\\.ai"
  - "admin\\.google\\.com"
  - "console\\.cloud\\.google\\.com"
  - "x\\.com"
  - "twitter\\.com"
  - "developer\\.x\\.com"
  - "openai\\.com"
  - "realpython\\.com"
  - "klarna\\.com"
  - "reddit\\.com"
  - "patreon\\.com"
  - "bitbucket\\.org/account"
  - "gitlab\\.com/-/user_settings"
  - "gitlab\\.com"
  - "console\\.x\\.ai"
  - "dash\\.cloudflare\\.com"
  - "aws\\.smith\\.langchain\\.com"
  - "guide\\.ncloud-docs\\.com"
  - "docs\\.sidclaw\\.com"
  - "scx\\.ai"
  - "docs\\.openbox\\.ai"
  - "docs\\.tealtiger\\.ai"
  - "gatecoreai\\.com"
  # GitHub: weekly runs hit secondary rate limits (429) across thousands of links.
  # Package repo liveness is covered by scripts/check_integration_repos.py instead.
  - "github\\.com"
  # Mintlify export bug: canonicals point at /src/_props/... which 404 on the live site
  - "docs\\.langchain\\.com/src/_props/"
  # OpenAPI-generated Agent Server pages (same class of noise as make broken-links)
  - "docs\\.langchain\\.com/langsmith/agent-server-api/"
  - "https://auth.langchain.com"
  - "https://eu.auth.langchain.com"
  # API host roots often 404 without a path; they are endpoints, not docs pages
  - "api\\.host\\.langchain\\.com"
  - "api\\.smith\\.langchain\\.com"
  - "eu\\.api\\.smith\\.langchain\\.com"
  - "docs\\.vllm\\.ai"
  - "app\\.slack\\.com"
  - "aws\\.amazon\\.com/marketplace"
  - "mckinsey\\.com"

---

## File: IDE_SETUP.md

# IDE Setup for Documentation Writers

This repository includes configuration files to ensure consistent formatting across different editors and IDEs used by documentation writers.

Ensure the following steps are taken and configurations are in place before making substantial docs changes.

## Automatic Configuration

### VSCode

If you're using Visual Studio Code, the settings in `.vscode/settings.json` should be automatically applied when you open this project. No additional setup required.

### Other IDEs

Most modern IDEs support EditorConfig. The `.editorconfig` file in the root directory will automatically configure:

- IntelliJ IDEA / PyCharm / WebStorm
- Sublime Text
- Atom
- Vim
- Emacs
- And many others

## Formatting Standards

### Indentation

- **1 tab = 4 spaces** for all files except:
  - JSON files: 2 spaces
  - YAML files: 2 spaces
  - CSS/HTML files: 2 spaces

### Line Length

- **No hard line breaks** for markdown files
- Word wrap is enabled but doesn't insert hard breaks
- Long lines are visually wrapped but remain as single lines in the file

### Line Endings

- **Unix-style line endings** (`\n`) for all files
- Trailing whitespace is automatically trimmed
- Final newline is automatically inserted

### Markdown-Specific Settings

- Preserve trailing spaces in markdown (needed for line breaks)
- No automatic formatting on save
- Word wrap enabled for readability
- No ruler/column guides

## Manual IDE Setup (if needed)

If your IDE doesn't automatically pick up these settings, configure manually:

### General Settings

```text
Tab Size: 4 spaces
Insert Spaces: Yes (not tabs)
Word Wrap: On
Auto Format on Save: Off
Trim Trailing Whitespace: Yes
Insert Final Newline: Yes
```

### Markdown Settings

```text
Word Wrap: On
Hard Line Breaks: Off
Preserve Trailing Spaces: Yes
Max Line Length: Unlimited
```

### Code Examples

```text
Python: 4 spaces
JavaScript/TypeScript: 4 spaces
JSON: 2 spaces
YAML: 2 spaces
```

## VSCode Extensions (Recommended)

For the best writing experience in VSCode, consider installing:

- **EditorConfig for VS Code** - Automatically applies .editorconfig settings
- **markdownlint** - Markdown editing enhancements
- **Markdown All in One** - Markdown editing enhancements
- **MDX** - Syntax highlighting for `.mdx` files
- **Prettier - Code formatter** (disabled for markdown in our settings)

## Why These Settings?

### No Hard Line Breaks

- Allows flexibility in how content is displayed across different devices
- Prevents awkward line breaks when content is edited
- Better for collaborative editing and version control
- Responsive to different screen sizes

### 4 Spaces for Indentation

- Consistent with Python conventions (used in code examples)
- Good readability for nested content
- Standard across most programming languages

### No Auto-Formatting

- Prevents unwanted changes to carefully crafted markdown
- Avoids breaking custom formatting like tables or code blocks
- Gives writers full control over content structure

## Troubleshooting

### VSCode Not Applying Settings

1. Restart VSCode after opening the project
2. Check that you're in the docs folder (not a parent directory)
3. Verify `.vscode/settings.json` exists in the project root

### Other IDEs Not Applying Settings

1. Ensure your IDE supports EditorConfig
2. Install the EditorConfig plugin if needed
3. Check that `.editorconfig` is in the project root
4. Restart your IDE

### Settings Not Working

If automatic configuration isn't working, manually configure your IDE using the settings listed above.

---

## File: package.json

{
  "name": "docs",
  "version": "1.0.0",
  "description": "Docs for the project",
  "private": true,
  "dependencies": {
    "@langchain/docs-sandbox": "^0.0.24"
  }
}

---

## File: packages.yml

# Source of truth for all LangChain packages and repos.
# Organized by langchain (python) repo structure.
#
# Used to generate the package index, partner package table, and more.
#
# Fields:
# - name:
#   - Used in the IGNORE_PKG list to exclude from partner package table
#   - Used to generate a short name ('name_short'), which is used if
#       name_title is not provided.
#   - Used for linking to provider page
# - name_title: Optional display name (otherwise generated from 'name')
# - integration: Optional, if false, not shown in integrations list.
# - highlight: Optional boolean, if true, package bypasses download filters
#     and appears first in the partner package table (sorted by downloads
#     within highlighted group). Use to feature strategic/new integrations.
#     Should only be set by LangChain maintainers.
# - repo: GitHub repo containing the pkg in the form "owner/repo".
# - path: Path to the package within the specified repo. If not present,
#     the package is assumed to be at the repo's root.
# - provider_page: Optional, used if the page is not at its default
#     location (e.g., /oss/integrations/providers/{p['name_short']}/).
#       - `'name_short'` is derived from the `name` field by removing the
#         `langchain-` prefix or `-langchain_` suffix.
# - js: Optional, the name of the corresponding JS package. Should be the
#     trailing portion of a NPM url, e.g., `@langchain/tavily` for the
#     full `https://www.npmjs.com/package/@langchain/tavily` URL.
#     Set to "n/a" if the integration is Python-specific and JS support
#     is not applicable (will display as "N/A" in partner package table).
# - downloads: Automatically calculated via scripts/packages_yml_get_downloads.py
#     - Fetches monthly download counts from pepy.tech
#     - To run manually: uv run scripts/packages_yml_get_downloads.py
#     - Runs automatically weekly on Sundays at 11:59 PM UTC via GitHub Actions
#       workflow: .github/workflows/update-package-downloads.yml
# - has_reference_docs: Optional boolean. Set to true for third-party packages
#     (type != monorepo/langchain-org) that have reference docs hosted on
#     reference.langchain.com. Without this, the package URL falls back to PyPI.
# - downloads_updated_at: Automatically calculated (ISO 8601 timestamp)
#
# Dead / renamed repo links: scripts/check_integration_repos.py scans `repo`
# weekly (workflow: .github/workflows/check-integration-repos.yml). It auto-fixes
# third-party GitHub renames confirmed by PyPI/npm/docs_url and drafts a PR to
# fully delist packages with no live GitHub, GitLab, or partner-docs home.
# First-party langchain-ai/* repos are skipped.

packages:
  # monorepo (alphabetical by path)
- name: langchain-aidress
  repo: Aidress-ai/Aidress
  downloads: 440
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-core
  integration: false
  repo: langchain-ai/langchain
  path: libs/core
  downloads: 139000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-classic
  integration: false
  repo: langchain-ai/langchain
  path: libs/langchain
  downloads: 16000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain
  integration: false
  repo: langchain-ai/langchain
  path: libs/langchain_v1
  downloads: 151000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-hashlock
  repo: Hashlock-Tech/langchain-hashlock
  downloads: 266
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-1claw
  repo: 1clawAI/langchain-1claw
  js: n/a
  downloads: 415
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-model-profiles
  integration: false
  repo: langchain-ai/langchain
  path: libs/model-profiles
  downloads: 32000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-replay
  repo: sixty-north/langchain-replay
  js: "n/a"
  downloads: 361
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-tests
  integration: false
  repo: langchain-ai/langchain
  path: libs/standard-tests
  downloads: 1000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-text-splitters
  integration: false
  repo: langchain-ai/langchain
  path: libs/text-splitters
  downloads: 37000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"

  # monorepo partners (alphabetical by path)
- name: langchain-anthropic
  name_title: Anthropic (Claude)
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/anthropic
  js: "@langchain/anthropic"
  downloads: 21000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-chroma
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/chroma
  js: "@langchain/community"
  downloads: 820000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-deepseek
  name_title: DeepSeek
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/deepseek
  js: "@langchain/deepseek"
  downloads: 759000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-engram
  repo: engram-ai/langchain-engram
  downloads: 238
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-exa
  repo: langchain-ai/langchain
  path: libs/partners/exa
  provider_page: exa_search
  js: "@langchain/exa"
  downloads: 133000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-fireworks
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/fireworks
  js: "@langchain/community"
  downloads: 592000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-groq
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/groq
  js: "@langchain/groq"
  downloads: 1000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-huggingface
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/huggingface
  js: "@langchain/community"
  downloads: 976000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-mistralai
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/mistralai
  js: "@langchain/mistralai"
  downloads: 1000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-nomic
  repo: langchain-ai/langchain
  path: libs/partners/nomic
  js: "@langchain/nomic"
  downloads: 6000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-ollama
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/ollama
  js: "@langchain/ollama"
  downloads: 2000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-openrouter
  name_title: OpenRouter
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/openrouter
  downloads: 774000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-openai
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/openai
  js: "@langchain/openai"
  downloads: 41000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-perplexity
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/perplexity
  js: "@langchain/community"
  downloads: 291000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-prompty
  repo: langchain-ai/langchain
  path: libs/partners/prompty
  provider_page: microsoft
  downloads: 5000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-qdrant
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/qdrant
  js: "@langchain/qdrant"
  downloads: 669000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-xai
  name_title: xAI (Grok)
  highlight: true
  repo: langchain-ai/langchain
  path: libs/partners/xai
  js: "@langchain/xai"
  downloads: 764000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"

  # internal langchain-ai org repos (alphabetical by path)
- name: langchain-community
  integration: false
  repo: langchain-ai/langchain-community
  path: libs/community
  downloads: 27000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-experimental
  integration: false
  repo: langchain-ai/langchain-experimental
  path: libs/experimental
  downloads: 2000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-mcp-adapters
  integration: false
  repo: langchain-ai/langchain-mcp-adapters
  downloads: 7000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"

  # external langchain-ai org repos (alphabetical by path)
- name: langchain-ai21
  repo: langchain-ai/langchain-ai21
  path: libs/ai21
  downloads: 892
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-alephantai
  name_title: Alephant AI
  repo: AlephantAI/alephant-python-sdk
  path: packages/langchain-alephantai
  js: "n/a"
  downloads: 291
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-alphai
  name_title: AlphaAI
  repo: makeev/langchain-alphai
  js: "n/a"
  downloads: 382
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-aws
  name_title: AWS
  highlight: true
  repo: langchain-ai/langchain-aws
  path: libs/aws
  js: "@langchain/aws"
  downloads: 9000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-azure-ai
  highlight: true
  repo: langchain-ai/langchain-azure
  path: libs/azure-ai
  provider_page: azure_ai
  js: "@langchain/openai"
  downloads: 555000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-azure-dynamic-sessions
  repo: langchain-ai/langchain-azure
  path: libs/azure-dynamic-sessions
  provider_page: microsoft
  js: "@langchain/azure-dynamic-sessions"
  downloads: 49000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-sqlserver
  repo: langchain-ai/langchain-azure
  path: libs/sqlserver
  provider_page: microsoft
  downloads: 801
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-cerebras
  repo: langchain-ai/langchain-cerebras
  path: libs/cerebras
  js: "@langchain/cerebras"
  downloads: 140000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-cohere
  highlight: true
  repo: langchain-ai/langchain-cohere
  path: libs/cohere
  js: "@langchain/cohere"
  downloads: 592000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-astradb
  name_title: DataStax Astra DB
  highlight: true
  repo: langchain-ai/langchain-datastax
  path: libs/astradb
  js: "@langchain/community"
  downloads: 167000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-elasticsearch
  highlight: true
  repo: langchain-ai/langchain-elastic
  path: libs/elasticsearch
  js: "@langchain/community"
  downloads: 138000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-google-community
  name_title: Google (Community)
  repo: langchain-ai/langchain-google
  path: libs/community
  provider_page: google
  downloads: 11000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-google-genai
  name_title: Google (GenAI)
  highlight: true
  repo: langchain-ai/langchain-google
  path: libs/genai
  provider_page: google
  js: "@langchain/google-genai"
  downloads: 16000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-google-vertexai
  name_title: Google (Gemini Enterprise Agent Platform)
  highlight: true
  repo: langchain-ai/langchain-google
  path: libs/vertexai
  provider_page: google
  js: "@langchain/google-vertexai"
  downloads: 29000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-ibm
  name_title: IBM
  highlight: true
  repo: langchain-ai/langchain-ibm
  path: libs/ibm
  js: "@langchain/ibm"
  downloads: 337000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-db2
  repo: langchain-ai/langchain-ibm
  path: libs/langchain-db2
  provider_page: ibm
  downloads: 2000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-milvus
  highlight: true
  repo: langchain-ai/langchain-milvus
  path: libs/milvus
  js: "@langchain/community"
  downloads: 254000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-mongodb
  highlight: true
  repo: langchain-ai/langchain-mongodb
  path: libs/langchain-mongodb
  provider_page: mongodb_atlas
  js: "@langchain/mongodb"
  downloads: 830000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-neo4j
  repo: langchain-ai/langchain-neo4j
  path: libs/neo4j
  js: "@langchain/community"
  downloads: 149000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-nvidia-ai-endpoints
  highlight: true
  repo: langchain-ai/langchain-nvidia
  path: libs/ai-endpoints
  provider_page: nvidia
  downloads: 573000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-parallel
  repo: parallel-web/langchain-parallel
  provider_page: parallel
  downloads: 57000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-pinecone
  highlight: true
  repo: langchain-ai/langchain-pinecone
  path: libs/pinecone
  js: "@langchain/pinecone"
  downloads: 442000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-redis
  highlight: true
  repo: langchain-ai/langchain-redis
  path: libs/redis
  js: "@langchain/redis"
  downloads: 121000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-sema4
  repo: langchain-ai/langchain-sema4
  path: libs/sema4
  provider_page: robocorp
  downloads: 266
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-snowflake
  repo: langchain-ai/langchain-snowflake
  path: libs/snowflake
  downloads: 9000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-together
  highlight: true
  repo: langchain-ai/langchain-together
  path: libs/together
  js: "@langchain/community"
  downloads: 77000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-unstructured
  repo: langchain-ai/langchain-unstructured
  path: libs/unstructured
  js: "@langchain/community"
  downloads: 188000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-upstage
  repo: langchain-ai/langchain-upstage
  path: libs/upstage
  downloads: 29000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-weaviate
  repo: langchain-ai/langchain-weaviate
  path: libs/weaviate
  js: "@langchain/weaviate"
  downloads: 224000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"

  # external repos (not organized)
- name: langchain-adeu
  repo: dealfluence/adeu
  path: langchain
  js: "n/a"
  downloads: 3000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-aimlapi
  repo: D1m7asis/langchain-aimlapi
  path: libs/aimlapi
  downloads: 519
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: dompruner
  name_title: DomPruner
  repo: dong7812/dompruner-py
  js: "n/a"
  downloads: 501
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: databricks-langchain
  name_title: Databricks
  highlight: true
  repo: databricks/databricks-ai-bridge
  path: integrations/langchain
  js: "@langchain/community"
  downloads: 522000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: respan-instrumentation-langchain
  name_title: Respan
  repo: respanai/respan
  path: python-sdks/instrumentations/respan-instrumentation-langchain
  js: "@respan/instrumentation-langchain"
  downloads: 358
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-duel
  repo: 2aronS/Duel-Agents
  path: python/langchain-duel
  downloads: 231
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-couchbase
  repo: Couchbase-Ecosystem/langchain-couchbase
  downloads: 981
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-box
  repo: box-community/langchain-box
  path: libs/box
  downloads: 455
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-linkup
  repo: LinkupPlatform/langchain-linkup
  downloads: 3000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-oceanbase
  repo: oceanbase/langchain-oceanbase
  downloads: 3000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-predictionguard
  repo: predictionguard/langchain-predictionguard
  downloads: 569
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-cratedb
  repo: crate/langchain-cratedb
  downloads: 423
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-modelscope
  repo: modelscope/langchain-modelscope
  downloads: 396
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-falkordb
  repo: kingtroga/langchain-falkordb
  downloads: 786
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-flipcoin
  name_title: FlipCoin
  repo: flipcoin-fun/flipcoin-langchain
  js: "n/a"
  downloads: 246
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-dappier
  repo: DappierAI/langchain-dappier
  downloads: 422
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-kuzu
  repo: kuzudb/langchain-kuzu
  downloads: 640
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-docling
  repo: DS4SD/docling-langchain
  downloads: 68000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-lindorm-integration
  name_title: Lindorm
  repo: AlwaysBluer/langchain-lindorm-integration
  provider_page: lindorm
  downloads: 247
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-hyperbrowser
  repo: hyperbrowserai/langchain-hyperbrowser
  downloads: 841
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-fmp-data
  repo: MehdiZare/langchain-fmp-data
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: tilores-langchain
  name_title: Tilores
  repo: tilotech/tilores-langchain
  downloads: 259
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-pipeshift
  repo: pipeshift-org/langchain-pipeshift
  downloads: 291
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-sambanova
  repo: sambanova/langchain-sambanova
  downloads: 26000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-jenkins
  repo: Amitgb14/langchain_jenkins
  downloads: 330
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-nimble
  repo: Nimbleway/langchain-nimble
  provider_page: nimble
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-keenable
  repo: keenableai/langchain-keenable
  js: "n/a"
  downloads: 370
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-apify
  repo: apify/langchain-apify
  downloads: 31000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langfair
  name_title: LangFair
  repo: cvs-health/langfair
  downloads: 2000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-abso
  repo: lunary-ai/langchain-abso
  downloads: 389
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-graph-retriever
  name_title: Graph RAG
  repo: datastax/graph-rag
  path: packages/langchain-graph-retriever
  provider_page: graph_rag
  downloads: 145000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-salesforce
  repo: colesmcintosh/langchain-salesforce
  downloads: 895
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-discord-shikenso
  name_title: Discord (Shikenso)
  repo: Shikenso-Analytics/langchain-discord
  downloads: 262
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-vdms
  name_title: VDMS
  repo: IntelLabs/langchain-vdms
  downloads: 831
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-deeplake
  repo: activeloopai/langchain-deeplake
  downloads: 271
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-cognee
  repo: topoteretes/langchain-cognee
  downloads: 289
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-goodmem
  name_title: GoodMem
  repo: PAIR-Systems-Inc/goodmem-langchain
  js: "n/a"
  downloads: 660
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-prolog
  repo: apisani1/langchain-prolog
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-permit
  repo: permitio/langchain-permit
  downloads: 339
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-pymupdf4llm
  repo: lakinduboteju/langchain-pymupdf4llm
  downloads: 41000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-writer
  repo: writer/langchain-writer
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-taiga
  name_title: Taiga
  repo: Shikenso-Analytics/langchain-taiga
  downloads: 3000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-tableau
  name_title: Tableau
  repo: Tab-SE/tableau_langchain
  downloads: 399
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: ads4gpts-langchain
  name_title: ADS4GPTs
  repo: ADS4GPTs/ads4gpts
  path: libs/python-sdk/ads4gpts-langchain
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: hlido-trust
  name_title: Hlido
  repo: ankitkapur1992-hlido/hlido-public
  path: integrations/hlido-trust
  downloads: 146
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-contextual
  name_title: Contextual AI
  repo: ContextualAI/langchain-contextual
  path: langchain-contextual
  downloads: 480
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-valthera
  name_title: Valthera
  repo: valthera/langchain-valthera
  downloads: 372
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-opengradient
  repo: OpenGradient/og-langchain
  downloads: 307
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: goat-sdk-adapter-langchain
  name_title: GOAT SDK
  repo: goat-sdk/goat
  path: python/src/adapters/langchain
  provider_page: goat
  downloads: 394
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-netmind
  repo: protagolabs/langchain-netmind
  downloads: 234
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-agentql
  repo: tinyfish-io/agentql-integrations
  path: langchain
  downloads: 337
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-tavily
  highlight: true
  repo: tavily-ai/langchain-tavily
  js: "@langchain/tavily"
  has_reference_docs: true
  downloads: 741000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-youdotcom
  name_title: "You.com"
  repo: youdotcom-oss/langchain-youdotcom
  js: "@youdotcom-oss/langchain"
  downloads: 897
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-zotero-retriever
  name_title: Zotero
  repo: TimBMK/langchain-zotero-retriever
  provider_page: zotero
  downloads: 259
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-naver
  name_title: Naver
  repo: NaverCloudPlatform/langchain-naver
  downloads: 15000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-naver-community
  name_title: Naver (Community)
  repo: e7217/langchain-naver-community
  provider_page: naver
  downloads: 353
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-nia
  name_title: Nia
  repo: nozomio-labs/nia-langchain
  path: libs/langchain-nia
  js: "@nozomioai/langchain-nia"
  has_reference_docs: false
  downloads: 258
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-memgraph
  repo: memgraph/langchain-memgraph
  downloads: 8000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-memstate
  name_title: Memstate AI
  repo: memstate-ai/langchain-memstate
  js: "n/a"
  has_reference_docs: false
  downloads: 394
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-vectara
  repo: vectara/langchain-vectara
  path: libs/vectara
  downloads: 339
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-oxylabs
  repo: oxylabs/langchain-oxylabs
  downloads: 477
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-runpod
  name_title: Runpod
  repo: runpod/langchain-runpod
  downloads: 331
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-mariadb
  repo: mariadb-corporation/langchain-mariadb
  downloads: 734
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-qwq
  repo: yigit353/langchain-qwq
  provider_page: alibaba_cloud
  downloads: 41000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-litellm
  name_title: LiteLLM
  highlight: true
  repo: langchain-ai/langchain-litellm
  js: "n/a"
  downloads: 1000000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-cloudflare
  repo: cloudflare/langchain-cloudflare
  path: libs/langchain-cloudflare
  js: "@langchain/cloudflare"
  downloads: 21000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-ydb
  repo: ydb-platform/langchain-ydb
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-singlestore
  name_title: SingleStore
  repo: singlestore-labs/langchain-singlestore
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-shannonbase
  name_title: ShannonBase
  repo: apoorva-01/langchain-shannonbase
  js: "n/a"
  downloads: 548
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-galaxia-retriever
  repo: rrozanski-smabbler/galaxia-langchain
  provider_page: galaxia
  downloads: 324
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-valyu
  repo: valyuAI/langchain-valyu
  downloads: 542
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-hana
  name_title: SAP HANA Cloud
  highlight: true
  repo: SAP/langchain-integration-for-sap-hana-cloud
  provider_page: sap
  js: "@sap/hana-langchain"
  downloads: 25000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-gel
  repo: geldata/langchain-gel
  downloads: 349
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-brightdata
  repo: luminati-io/langchain-brightdata
  downloads: 2000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-proxyhat
  repo: ProxyHatCom/langchain-proxyhat
  js: "n/a"
  downloads: 315
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-proxmint
  name_title: ProxmintLoader
  repo: proxmint/langchain-proxmint
  js: "n/a"
  downloads: 468
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-featherless-ai
  repo: featherlessai/langchain-featherless-ai
  downloads: 347
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-nebius
  repo: nebius/langchain-nebius
  path: libs/nebius
  downloads: 5000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-surrealdb
  repo: surrealdb/langchain-surrealdb
  downloads: 627
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-greennode
  repo: greennode-ai/langchain-greennode
  path: libs/greennode
  downloads: 253
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-tensorlake
  repo: tensorlakeai/langchain-tensorlake
  downloads: 477
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-gradient
  name_title: DigitalOcean Gradient AI Platform
  repo: digitalocean/langchain-gradient
  provider_page: gradientai
  downloads: 2000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-anchorbrowser
  name_title: Anchor Browser
  repo: anchorbrowser/langchain-anchorbrowser
  provider_page: anchor_browser
  downloads: 467
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: toolbox-langchain
  name_title: MCP Toolbox (Google)
  highlight: true
  repo: googleapis/mcp-toolbox-sdk-python
  path: packages/toolbox-langchain
  downloads: 4000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-scrapeless
  repo: scrapeless-ai/langchain-scrapeless
  downloads: 243
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-google-bigtable
  name_title: Bigtable (Google)
  repo: googleapis/langchain-google-bigtable-python
  provider_page: google
  downloads: 555
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-oci
  name_title: Oracle Cloud Infrastructure (OCI)
  repo: oracle/langchain-oracle
  downloads: 64000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-zeusdb
  repo: zeusdb/langchain-zeusdb
  path: libs/zeusdb
  downloads: 359
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-scraperapi
  repo: scraperapi/langchain-scraperapi
  downloads: 362
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-localai
  repo: mkhludnev/langchain-localai
  path: libs/localai
  downloads: 624
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-scrapegraph
  repo: ScrapeGraphAI/langchain-scrapegraph
  downloads: 3000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-voyageai
  repo: voyage-ai/langchain-voyageai
  path: libs/voyageai
  downloads: 127000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-oracledb
  name_title: Oracle AI Vector Search
  repo: oracle/langchain-oracle
  provider_page: oracleai
  js: "@oracle/langchain-oracledb"
  downloads: 195000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-cosmergon
  name_title: Cosmergon
  repo: rkocosmergon/langchain-cosmergon
  js: "n/a"
  downloads: 672
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-agenticemail
  name_title: AgenticEmail
  repo: AgenticEmail/langchain-agenticemail
  js: "n/a"
  downloads: 280
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-agentmail
  repo: agentmail-to/langchain-agentmail
  js: "n/a"
  downloads: 287
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-opedd
  name_title: Opedd
  repo: Opedd/langchain-opedd
  js: "n/a"
  downloads: 459
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-verifly
  name_title: Verifly
  repo: james-sib/langchain-verifly
  js: "n/a"
  downloads: 254
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-sibfly
  name_title: SibFly
  repo: james-sib/langchain-sibfly
  js: "n/a"
  downloads: 252
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-infino
  name_title: Infino
  repo: infino-ai/langchain-infino
  js: "@infino-ai/langchain-infino"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-ceki
  name_title: Ceki
  repo: Ceki-me/langchain
  path: packages/python
  js: "@ceki/langchain-ceki"
  downloads: 246
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-skim
  name_title: Skim
  repo: JessieJanie/langchain-skim
  js: "n/a"
  downloads: 504
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: m3-memory
  name_title: m3-memory
  repo: skynetcmd/m3-memory
  path: .
  js: "n/a"
  downloads: 15000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-ai-identity
  name_title: AI Identity
  repo: Levaj2000/AI-Identity
  path: sdk/langchain
  js: "n/a"
  downloads: 263
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-sidclaw
  name_title: SidClaw
  repo: sidclawhq/platform
  path: integrations/langchain-python
  js: "n/a"
  downloads: 291
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-goodsender
  name_title: GoodSender
  repo: good-sender/langchain-goodsender
  js: "n/a"
  downloads: 244
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-oxidize-pdf
  name_title: oxidize-pdf
  repo: bzsanti/oxidize-pdf-integrations
  path: langchain
  js: "n/a"
  downloads: 265
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: optionsahoy-langchain
  name_title: OptionsAhoy
  repo: AlvisoOculus/optionsahoy-mcp
  path: integrations/python/optionsahoy-langchain
  js: "n/a"
  downloads: 533
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-empiriolabs
  name_title: EmpirioLabs AI
  repo: EmpirioLabs-ai/langchain-empiriolabs
  js: "@empiriolabs/langchain"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-arxiv-retriever
  name_title: arXiv
  repo: j1c/langchain-arxiv-retriever
  js: "n/a"
  downloads: 271
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-dexpaprika
  repo: coinpaprika/langchain-dexpaprika
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-zerogpu
  name_title: ZeroGPU
  repo: zerogpu/langchain-zerogpu
  js: "n/a"
  downloads: 648
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-replylayer
  repo: replylayer/rly
  path: langchain-python
  js: "n/a"
  downloads: 694
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-thalam
  name_title: thalam.
  repo: thalam-ai/langchain-thalam
  js: "n/a"
  downloads: 237
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-pdf-inspector
  name_title: pdf-inspector
  repo: undacmic/langchain-pdf-inspector
  js: "n/a"
  downloads: 627
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-strale
  name_title: Strale
  repo: strale-io/strale
  path: packages/langchain-strale
  downloads: 389
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-serpex-python
  name_title: Serpex
  repo: divyeshradadiya/langchain-serpex-python
  js: langchain-serpex-js
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-livetennis
  name_title: "Live Tennis API"
  repo: livetennisapi/langchain-livetennis
  js: "n/a"
  downloads: 319
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-diffbot
  name_title: Diffbot
  repo: diffbot/langchain-diffbot
  js: "n/a"
  downloads: 526
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-longprobe
  name_title: LongProbe
  repo: ENDEVSOLS/langchain-longprobe
  js: "n/a"
  downloads: 306
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-aneforge
  name_title: ANEForge
  repo: sbryngelson/langchain-aneforge
  js: "n/a"
  downloads: 256
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: bastion-prompt-protection
  name_title: Bastion Prompt Protection
  repo: bastion-soft/bastion-prompt-protection
  js: "n/a"
  downloads: 488
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-ilovevideoeditor
  name_title: iLoveVideoEditor
  repo: ilovevideoeditor/langchain-ilovevideoeditor
  js: "n/a"
  downloads: 250
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-hwp-hwpx-loader
  name_title: HWP/HWPX
  repo: jaypakdevkr/HWP-Loader
  js: "n/a"
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-soul
  name_title: Soul
  repo: menonpg/langchain-soul
  js: "n/a"
  downloads: 315
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-igpt
  name_title: iGPT
  repo: igptai/langchain-igpt
  js: "n/a"
  downloads: 276
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-hippodid
  name_title: HippoDid
  repo: SameThoughts/langchain-hippodid
  js: "n/a"
  downloads: 262
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: vequil
  name_title: Vequil
  repo: nxd914/vequil
  js: "n/a"
  downloads: 71
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: sulci
  name_title: Sulci Cache
  repo: sulci-io/sulci-oss
  js: "n/a"
  downloads: 6000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-firebolt
  name_title: Firebolt
  repo: firebolt-db/langchain-firebolt
  js: "n/a"
  downloads: 298
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-crawleo
  name_title: Crawleo
  repo: Crawleo/langchain-crawleo
  js: "n/a"
  downloads: 272
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-lambdadb
  name_title: LambdaDB
  repo: lambdadb/langchain-lambdadb
  js: "@functional-systems/langchain-lambdadb"
  downloads: 359
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: prompt-quality-score
  name_title: PQS
  repo: OnChainAIIntel/pqs-sdk
  js: "n/a"
  downloads: 198
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-openmemory
  name_title: OpenMemory
  repo: nullure/langchain-openmemory
  js: "n/a"
  downloads: 3
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: interfaze-langchain
  name_title: Interfaze
  repo: InterfazeAI/langchain-interfaze
  js: "@interfaze-ai/langchain"
  downloads: 254
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-novita
  name_title: Novita
  repo: novitalabs/langchain-novita
  js: "n/a"
  downloads: 324
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: createos-sandbox
  name_title: CreateOS Sandbox
  repo: NodeOps-app/createos-sandbox-sdk
  js: "@nodeops-createos/sandbox"
  downloads: 463
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-kubernetes
  name_title: Kubernetes
  repo: bitkaio/kubernetes-sandbox
  js: "@bitkaio/langchain-kubernetes"
  downloads: 442
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-nono
  name_title: nono
  repo: always-further/langchain-nono
  js: "n/a"
  downloads: 394
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: pramagent
  name_title: Pramagent
  repo: sriram7737/pramagent
  js: "n/a"
  downloads: 1000
  downloads_updated_at: "2026-10-29T10:30:45.069091+00:00"
- name: langchain-lexmex
  name_title: LexMex
  repo: Volpsmx/langchain-lexmex
  js: "n/a"
  downloads: 340
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langgraph-agentram
  name_title: AgentRAM
  repo: seanmarkwei/langgraph-agentram
  js: "n/a"
  downloads: 194
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-polardb-pg
  name_title: PolarDB PG
  repo: polardb/langchain-polardb-pg
  js: "n/a"
  downloads: 339
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-opensolr
  name_title: Opensolr
  repo: phpcip/langchain-opensolr
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-coalent
  name_title: Coalent
  repo: Vectorlink-Labs/coalent
  path: integrations/langchain-coalent
  js: "n/a"
  downloads: 333
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-youtube
  name_title: YouTube
  repo: urraf/langchain-youtube
  js: "n/a"
  downloads: 408
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-reserp
  name_title: Reserp
  repo: reserp-ai/langchain-reserp
  downloads: 435
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-xns
  name_title: XNS
  repo: xns-cloud/langchain-xns
  js: "n/a"
  downloads: 255
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-opendma
  name_title: OpenDMA
  repo: OpenDMA/langchain-opendma
  js: "n/a"
  downloads: 397
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-wavespeed
  name_title: WaveSpeed
  repo: WaveSpeedAI/langchain-wavespeed
  js: "n/a"
  downloads: 789
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: recall-rag
  name_title: RE-call
  repo: GiulioDER/RE-call
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-tendem
  name_title: Tendem
  repo: Toloka/tendem-mcp
  path: integrations/langchain-tendem
  js: "n/a"
  downloads: 289
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-erc8004
  name_title: ERC-8004
  repo: Conrad-sudo/langchain-erc8004
  js: "n/a"
  downloads: 329
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: seekrit
  name_title: seekrit
  repo: seekritdev/python-sdk
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-simplepages
  name_title: Simplepages
  repo: simplepages-ai/langchain-simplepages
  js: "n/a"
  downloads: 259
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-neuraltrust
  name_title: NeuralTrust
  repo: NeuralTrust/langchain-neuraltrust
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-webmetadata-extractor
  name_title: Web Metadata Extractor
  repo: JosejuX/rapidapi-metadata-extractor
  path: langchain-webmetadata-extractor
  js: "n/a"
  downloads: 254
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-hydrafetch
  name_title: Hydrafetch
  repo: Hydrafetch/langchain-hydrafetch
  js: "n/a"
  downloads: 645
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-quanticdata
  name_title: QuanticData
  repo: quantumproxies/langchain-quanticdata
  js: "n/a"
  downloads: 269
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: asqav
  name_title: Asqav
  repo: jagmarques/asqav-sdk
  js: "n/a"
  downloads: 6000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-sandbox-opensandbox
  name_title: OpenSandbox
  repo: AyushSonuu/langchain-sandbox-opensandbox
  js: "n/a"
  downloads: 7000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-agenttrafficlab
  name_title: Agent Traffic Lab
  repo: wenhua6666668-oss/langchain-agenttrafficlab
  js: "n/a"
  downloads: 480
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-tokportal
  name_title: TokPortal
  repo: tokportal/langchain-tokportal
  js: "n/a"
  downloads: 397
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-yantrikdb
  name_title: YantrikDB
  repo: yantrikos/langchain-yantrikdb
  js: "n/a"
  downloads: 245
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-blopus
  name_title: Blopus
  repo: blopus-ai/langchain-blopus
  js: "n/a"
  downloads: 500
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-stackoverflow
  name_title: Stack Overflow
  repo: urraf/langchain-stackoverflow
  js: "n/a"
  downloads: 283
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-hackernews
  name_title: Hacker News
  repo: urraf/langchain-hackernews
  js: "n/a"
  downloads: 259
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-reddit
  name_title: Reddit
  repo: urraf/langchain-reddit
  js: "n/a"
  downloads: 264
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-playstore
  name_title: Play Store
  repo: urraf/langchain-playstore
  js: "n/a"
  downloads: 265
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: ctrlrun-langchain
  name_title: CTRLRun
  repo: CTRLRun/ctrlrun
  path: adapters/langchain
  js: "n/a"
  downloads: 316
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: attenu-guard
  name_title: Attenu Guard
  repo: attenu-io/attenu-guard
  js: "n/a"
  downloads: 4000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-rostam
  name_title: Rostam
  repo: rostamlabs/rostam
  path: clients/langchain-rostam
  js: "n/a"
  downloads: 265
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-lyrenth
  name_title: Lyrenth
  repo: lyrenth/langchain-lyrenth
  js: "n/a"
  downloads: 303
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: xaidr
  name_title: xaidr
  repo: delphisecurity/xaidr
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: safeprompt-langchain
  name_title: SafePrompt
  repo: ianreboot/safeprompt
  js: "@safeprompt.dev/langchain"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-webz
  name_title: Webz
  repo: Webhose/webz-news-search
  js: "n/a"
  downloads: 315
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-truthbear
  name_title: Truth Bear
  repo: CHANGCHINFU/langchain-truthbear
  js: "n/a"
  downloads: 307
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: isnad
  name_title: ISNAD
  repo: alizahidraja/isnad
  js: "n/a"
  downloads: 10000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: capsule-emit
  name_title: Agent Action Capsule
  repo: action-state-group/capsule-emit
  js: "n/a"
  downloads: 7000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: gandr-langchain
  name_title: Gandr
  repo: Gandr-AI/gandr-langchain
  js: "n/a"
  downloads: 370
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-footballcharts
  name_title: Football Charts
  repo: ddevetak/langchain-footballcharts
  js: "n/a"
  downloads: 281
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: omem-infrastructure
  name_title: OMEM
  repo: troybrandonc-bit/Omem
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: piighost
  name_title: PIIGhost
  repo: Athroniaeth/piighost
  js: "n/a"
  downloads: 4000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-ictfax
  name_title: ICTFax
  repo: ictinnovations/langchain-ictfax
  js: "n/a"
  downloads: 360
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-tokonomics
  name_title: Tokonomics
  repo: aitoukhrib/langchain-tokonomics
  js: "n/a"
  downloads: 255
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-ictexam
  name_title: ICTExam
  repo: ictinnovations/langchain-ictexam
  js: "n/a"
  downloads: 258
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-openzoo
  name_title: OpenZoo
  repo: staccDOTsol/langchain-openzoo
  js: "n/a"
  downloads: 302
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-ictcontact
  name_title: ICTContact
  repo: ictinnovations/langchain-ictcontact
  js: "n/a"
  downloads: 253
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-magic-hour
  name_title: Magic Hour
  repo: RhythmP28/langchain-magic-hour
  js: "langchain-magic-hour"
  downloads: 261
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-ictpbx
  name_title: ICTPBX
  repo: ictinnovations/langchain-ictpbx
  js: "n/a"
  downloads: 279
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-context
  name_title: Context.dev
  repo: context-dot-dev/langchain-context
  js: "n/a"
  downloads: 274
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-atomicmail
  name_title: Atomic Mail
  repo: Atomic-Mail/atomic-mail-agentic
  js: "@atomicmail/langchain"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-latam-synth
  name_title: LatAm Synth
  repo: jmendozapuche/langchain-latam-synth
  js: "n/a"
  downloads: 393
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: signa-langchain
  name_title: SIGNA
  repo: codexvritra/signa
  path: sdk/langchain
  js: signa-langchain
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-brainiall
  name_title: Brainiall
  repo: fasuizu-br/langchain-brainiall
  js: "n/a"
  downloads: 362
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: aacp-langchain
  name_title: AACP
  repo: MackayAndrew/aacp-langchain
  js: "n/a"
  downloads: 328
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-ausca
  name_title: Ausca
  repo: auscahq/ausca
  path: python/langchain-ausca
  js: "langchain-ausca"
  downloads: 292
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-dnsdoctor
  name_title: DNS Doctor
  repo: dnsdoctor/langchain-dnsdoctor
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: maskflow-langchain
  name_title: MaskFlow
  repo: maskflow/maskflow
  path: packages/maskflow-langchain
  js: "n/a"
  downloads: 352
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-anyapi
  name_title: AnyAPI
  repo: getanyapi-com/integrations
  path: langchain-anyapi
  js: "n/a"
  downloads: 359
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-hubris
  name_title: Hubris
  repo: Aimagine-life/langchain-hubris
  js: "n/a"
  downloads: 355
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: traccia
  name_title: Traccia
  repo: traccia-ai/traccia-py
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-serenedb
  name_title: SereneDB
  repo: serenedb/langchain-serenedb
  js: "n/a"
  downloads: 297
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-typesense
  name_title: TypesenseVectorStore
  repo: typesense/langchain-typesense
  js: "n/a"
  downloads: 369
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: chronovec
  name_title: ChronoVec
  repo: mchl-labs/chronovec
  js: "n/a"
  downloads: 445
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-plivo-tools
  name_title: Plivo
  repo: plivo-dev/langchain-plivo-tools
  js: "n/a"
  downloads: 345
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-foxnose-js
  name_title: FoxNose
  repo: FoxNoseTech/langchain-foxnose-js
  js: "@foxnose/langchain"
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: capslane
  name_title: Capslane
  repo: Webba-Creative-Technologies/capslane-python
  js: "n/a"
  downloads: 311
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-foxnose
  name_title: FoxNose
  repo: FoxNoseTech/langchain-foxnose
  js: "n/a"
  downloads: 474
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: antibrow
  name_title: AntiBrow
  repo: antibrow/antibrow
  path: python
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: corsair-dev-langchain
  name_title: Corsair
  repo: corsairdev/corsair
  js: "@corsair-dev/langchain"
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-vectorpanda
  name_title: Vector Panda
  repo: vectorpanda/langchain-vectorpanda
  js: "n/a"
  downloads: 349
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: aiworker-langchain-tools
  name_title: aiworker
  repo: ai-worker227/aiworker-examples
  js: aiworker-langchain-tools
  path: langchain
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-greencalculus
  name_title: GreenCalculus
  repo: greencalculus/langchain-greencalculus
  js: "n/a"
  downloads: 367
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: pushary-langgraph
  name_title: Pushary
  repo: Pushary/pushary-langgraph
  js: "@pushary/langgraph"
  downloads: 489
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-whoosh
  name_title: Whoosh
  repo: priya-sundaram-dev/whoosh
  path: integrations/langchain-whoosh
  js: "n/a"
  downloads: 395
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-dynamic-tools-middleware
  name_title: DynamicToolSelectorMiddleware
  repo: RauhanAhmed/langchain-dynamic-tools-middleware
  js: "n/a"
  downloads: 437
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-polign
  repo: Polign/polign
  js: "n/a"
  downloads: 304
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-algenta
  name_title: Algenta
  repo: thyn-ai/algenta-integrations
  path: python/langchain-algenta
  js: "n/a"
  downloads: 608
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: continuity-remote
  name_title: Continuity tools
  repo: zerohourzulu/continuity
  path: packages/remote-tools
  js: "@ramex-labs/continuity-remote"
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: satohub-langchain-tools
  name_title: SatoHubTools
  repo: satohubai/sato-hub-integrations
  path: packages/satohub-langchain-tools
  js: satohub-langchain-tools
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: orcareplay-langgraph
  name_title: OrcaCallbackHandler
  repo: Continuum-AI-Corp/OrcaReplay
  path: python-langgraph
  js: "n/a"
  downloads: 142
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-asyntai
  name_title: Asyntai
  repo: asyntai/langchain-asyntai
  js: "n/a"
  downloads: 298
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-mnki
  name_title: MnkiGuardedTool
  repo: MNKIAgentOS/agent-trust
  js: "n/a"
  downloads: 502
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: semantica
  name_title: Semantica
  repo: semantica-agi/semantica
  js: "n/a"
  downloads: 14000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: openinference-instrumentation-langchain
  name_title: OpenInference
  repo: Arize-ai/openinference
  path: python/instrumentation/openinference-instrumentation-langchain
  js: "@arizeai/openinference-instrumentation-langchain"
  downloads: 3000000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-enconvert
  name_title: EnConvert
  repo: enconvert/langchain-enconvert
  js: "n/a"
  downloads: 293
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: al-buddy-memory
  name_title: AlBuddyMemoryStore
  repo: flytomoon/al-buddy-memory
  js: al-buddy-memory
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-feedmyagent
  name_title: FeedMyAgent
  repo: makash/feedmyagent-skill
  path: integrations/langchain
  js: "n/a"
  downloads: 327
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: noveum-trace
  name_title: NoveumTraceCallbackHandler
  repo: Noveum/noveum-trace
  js: "n/a"
  downloads: 32000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: brydge-langchain
  name_title: BRYDGE
  repo: contactkontey-dotcom/langchain-brydge
  js: brydge-langchain
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: scoutwyze-compute
  name_title: ScoutWyze Compute
  repo: scoutwyze-max/scoutwyze-compute
  js: "n/a"
  downloads: 146
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: tenuo
  name_title: Tenuo
  repo: tenuo-ai/tenuo
  js: "n/a"
  downloads: 12000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-thordata
  name_title: ThorData
  repo: Thordata/langchain-thordata
  js: "n/a"
  downloads: 709
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-clearsigned
  name_title: Clearsigned
  repo: diawest82/langchain-clearsigned
  js: "n/a"
  downloads: 336
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-amu
  name_title: AMUVectorStore
  repo: sangaraju1988/amu-pgvector
  js: "n/a"
  downloads: 669
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-memoryrouter
  name_title: MemoryRouter
  repo: John-Rood/memoryrouter-sdk
  js: "n/a"
  downloads: 393
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-promptfirewall
  name_title: PromptfirewallGuard
  repo: TimurRakhmatullin86/langchain-promptfirewall
  js: "n/a"
  downloads: 331
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-urlpipe
  name_title: UrlpipeToolkit
  repo: URLpipe/langchain-urlpipe
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-foliant
  name_title: FoliantPaymentTool
  repo: gazoy/langchain-foliant
  js: "n/a"
  downloads: 5000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-mart
  name_title: MartToolkit
  repo: Mart-API/langchain-mart
  js: "n/a"
  downloads: 327
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: inferrail
  name_title: Inferrail
  repo: domondi1/inferrail
  js: "n/a"
  downloads: 7000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-upload-post
  name_title: UploadPostToolkit
  repo: Upload-Post/langchain-upload-post
  js: "n/a"
  downloads: 411
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: confident-trace
  name_title: Confident AI
  repo: confident-ai/confident-trace
  js: "n/a"
  downloads: 4000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-schemagate
  repo: ashishsinha1602/langchain-schemagate
  js: "n/a"
  downloads: 360
  downloads_updated_at: '2026-10-29T12:01:01+00:00'
- name: langchain-kavel
  name_title: KavelImageGenerator
  repo: hanshs474/langchain-kavel
  js: "n/a"
  downloads: 613
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-arcmira
  name_title: Arcmira
  repo: arcmira/integrations
  path: packages/langchain-python
  js: "n/a"
  downloads: 3000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-flexai
  name_title: FlexAI
  repo: flexaihq/langchain-flexai
  js: "n/a"
  downloads: 625
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: ned-watch
  repo: ned-mind/ned-watch-integrations
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-machinelibrary
  name_title: MachineLibraryRetriever
  repo: SpaceFrontiers/machinelibrary-integrations
  path: python/langchain-machinelibrary
  js: "n/a"
  downloads: 932
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langgraph-minnsdb
  name_title: MinnsDB
  repo: Minns-ai/langgraph-minnsdb
  js: "n/a"
  downloads: 816
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-infinispan
  name_title: InfinispanVectorStore
  repo: infinispan/langchain-infinispan
  path: libs/infinispan
  js: "n/a"
  downloads: 608
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-bowmark
  name_title: BowmarkToolkit
  repo: bowmark-ai/langchain-bowmark
  js: "n/a"
  downloads: 4000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-flatmark
  name_title: FlatmarkLoader
  repo: flatmark-dev/flatmark-integrations
  js: "n/a"
  downloads: 5000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-tanod
  name_title: TanodToolkit
  repo: tanod-labs/integrations
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-serpkite
  name_title: SerpKite
  repo: SerpKite/langchain-serpkite
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: fizzl
  name_title: Fizzl
  repo: Fizzl13/x402-examples
  path: fizzl-py
  js: fizzl-langchain
  downloads: 4000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: pipe0-langchain
  name_title: pipe0
  repo: pipe-0/pipe0
  path: packages/langchain
  js: "@pipe0/langchain"
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-pexafy
  name_title: PexafyToolkit
  repo: Pexafy/langchain-pexafy
  js: langchain-pexafy
  downloads: 3000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-flashdata
  name_title: FlashDataToolkit
  repo: rocosen/langchain-flashdata
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-getyoutubetranscript
  repo: tubeagentkit/langchain-getyoutubetranscript
  js: "@tubeagentkit/langchain-getyoutubetranscript"
  downloads: 659
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-meragpt
  name_title: MeragptDecider
  repo: Sandeep85Das/langchain-meragpt
  js: "n/a"
  downloads: 578
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-lizard
  name_title: LizardSandbox
  repo: lizard-build/langchain-lizard
  js: "n/a"
  downloads: 482
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-openalex
  name_title: OpenAlexSearch
  repo: ourresearch/langchain-openalex
  js: "n/a"
  downloads: 700
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langgraph-goat
  name_title: GoAT
  repo: Samsung/langgraph-goat
  js: "n/a"
  downloads: 942
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-decodo
  name_title: Decodo
  repo: Decodo/langchain
  path: libs/partners/decodo
  js: "@decodo/langchain-ts"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-nano-banana-acedatacloud
  name_title: Nano Banana by Ace Data Cloud
  repo: AceDataCloud/LangChain
  path: packages/nano-banana
  js: "n/a"
  downloads: 705
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-gpt-image-acedatacloud
  name_title: GPT Image by Ace Data Cloud
  repo: AceDataCloud/LangChain
  path: packages/gpt-image
  js: "n/a"
  downloads: 723
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-acedatacloud
  name_title: Ace Data Cloud
  repo: AceDataCloud/LangChain
  path: packages/core
  js: "n/a"
  downloads: 813
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-happyhorse-acedatacloud
  name_title: HappyHorse by Ace Data Cloud
  repo: AceDataCloud/LangChain
  path: packages/happyhorse
  js: "n/a"
  downloads: 705
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-seedance-acedatacloud
  name_title: SeedanceToolkit
  repo: AceDataCloud/LangChain
  path: packages/seedance
  js: "n/a"
  downloads: 469
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-suno-acedatacloud
  name_title: SunoToolkit
  repo: AceDataCloud/LangChain
  path: packages/suno
  js: "n/a"
  downloads: 351
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: tracekit-ai
  name_title: TracekitMiddleware
  repo: Cygnux-Labs/Tracekit
  js: "n/a"
  downloads: 5000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: hirepulse-tools
  name_title: HirePulse
  repo: edtool79-collab/hirepulse-open-source
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: ddg-langchain
  name_title: DDG Agent Services
  repo: daedalusdevelopmentgroup/ddg-agent-payable-services
  js: "n/a"
  downloads: 521
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: loopgrid-langchain
  name_title: LoopGrid
  repo: loopgridio/loopgrid-langchain
  js: "n/a"
  downloads: 495
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: web2md-client
  name_title: Web2MDLoader
  repo: kanavsingla28/web2md-clients
  path: python
  js: "n/a"
  downloads: 410
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: agentsvc
  name_title: agentsvc
  repo: agentsvc/agentsvc
  js: agentsvc
  downloads: 501
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-docling-rs
  name_title: DoclingLoader
  repo: docling-project/docling.rs
  js: "n/a"
  downloads: 7000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: vulnify
  name_title: Vulnify
  repo: vulnify/vulnify-sdk-python
  js: "n/a"
  downloads: 3000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-fodda
  name_title: FoddaContextRetriever
  repo: fodda-ai/langchain-fodda
  js: "n/a"
  downloads: 561
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-recall
  name_title: RecallMiddleware
  repo: recallmem/recall
  js: "@recall-memory/langchain"
  downloads: 499
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-printfriendly
  name_title: PrintFriendlyReadPage
  repo: printfriendly/langchain-printfriendly
  js: "n/a"
  downloads: 464
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-topxai
  name_title: ChatTopxAI
  repo: UnbelievableT/langchain-topxai
  js: "n/a"
  downloads: 900
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-mesharc
  name_title: MeshArcLoader
  repo: mesharc-org/langchain-mesharc
  js: "n/a"
  downloads: 847
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: deepagents-graph-memory
  name_title: Deep Agents Graph Memory
  repo: TahaK29/deepagents-graph-memory
  js: "n/a"
  downloads: 6000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-cyborgdb
  name_title: CyborgVectorStore
  repo: cyborginc/langchain-cyborgdb
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-veida
  name_title: VeidaImageGenerator
  repo: hanshs474/langchain-veida
  js: "n/a"
  downloads: 564
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-emaki
  name_title: EmakiVideoGenerator
  repo: hanshs474/langchain-emaki
  js: "n/a"
  downloads: 481
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-superpdf
  name_title: SuperPDFLoader
  repo: arjunprabhulal/superpdf
  js: "n/a"
  downloads: 908
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-send21
  name_title: Send21Toolkit
  repo: send21io/send21-examples
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-gnews
  name_title: GNewsTopHeadlines
  repo: gnews-io/langchain-gnews
  js: "n/a"
  downloads: 515
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-twittrapi
  name_title: TwittrAPIToolkit
  repo: twittrapi/langchain-twittrapi
  js: "n/a"
  downloads: 892
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: mercedes-benz-service-reminder-mcp
  name_title: Mercedes-Benz Service Reminder (SilberArrows)
  repo: gentlegiant96202/mercedes-benz-service-reminder-mcp
  js: mercedes-benz-service-reminder-mcp
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-openpath
  name_title: OpenpathSearch
  repo: agentbeacon-hq/clients
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-kapa-ai
  name_title: Kapa
  repo: kapa-ai/langchain-kapa-ai
  js: "n/a"
  downloads: 861
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-scaledown
  name_title: ScaleDown
  repo: scaledown-team/langchain-scaledown
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-wity
  name_title: Wity
  repo: info-alphanimble/langchain-wity
  js: "n/a"
  downloads: 868
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-pink
  name_title: PinkToolkit
  repo: Pink-Agentic-Payments/langchain-pink
  js: "n/a"
  downloads: 582
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-turn-window
  name_title: TurnWindowMiddleware
  repo: bharatkhanna-dev/langchain-turn-window
  js: "n/a"
  downloads: 554
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: llmslim
  name_title: LLMSlimCompressor
  repo: Thanatos9404/llmslim
  js: "n/a"
  downloads: 5000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-carejobs
  name_title: CareJobsToolkit
  repo: yumaheymans/langchain-carejobs
  js: "n/a"
  downloads: 374
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-contextfetch
  name_title: ContextFetchSearch
  repo: lachy3433/langchain-contextfetch
  js: "n/a"
  downloads: 781
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: precleared
  repo: gabrielaoimevbore-beep/precleared-python
  js: precleared
  downloads: 714
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: ppl-memory
  name_title: PplStore
  repo: ppl-crm/ppl-memory
  js: "n/a"

  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-instant-expert
  name_title: InstantExpertToolkit
  repo: Instant-Expert/integrations
  path: js/langchain-instant-expert
  js: langchain-instant-expert
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: databazaar-agent-tools
  name_title: DataBazaar
  repo: shagarwal/databazaar-agent-tools
  js: databazaar-agent-tools
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: webcrawlerapi-langchain
  name_title: WebCrawlerAPILoader
  repo: WebCrawlerAPI/webcrawlerapi-langchain
  js: "n/a"
  downloads: 624
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-financial-evidence
  name_title: FinancialEvidenceToolkit
  repo: beepboop2025/langchain-financial-evidence
  js: "n/a"
  downloads: 913
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-tanvo
  name_title: TanvoToolkit
  repo: tanvoai/langchain-tanvo
  js: "n/a"
  downloads: 538
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-swarmmemo
  name_title: SwarmMemoToolkit
  repo: Hugo0/swarmmemo
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: ctxprune
  name_title: CtxpruneDocumentCompressor
  repo: riceharvest/ctxprune
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: datumline-agent-guard
  name_title: AgentGuardTool
  repo: datumline/datumline-agent-guard
  js: "n/a"
  downloads: 957
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-model-router
  name_title: ChatRouter
  repo: danielpolok/langchain-model-router
  js: "n/a"
  downloads: 583
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-verdix
  name_title: VerdixAddressRiskTool
  repo: verdixapi/langchain-verdix
  js: "n/a"
  downloads: 982
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-sra-riskgate
  name_title: SRARiskGateMiddleware
  repo: sriram1983007-dev/langchain-sra-riskgate
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: steward-mcp
  name_title: Steward
  repo: brianbooms/plugin-steward
  js: "@brianbooms/steward-mcp"
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langgraph-store-qdrant
  name_title: QdrantStore
  repo: qdrant-labs/langgraph-qdrant
  js: "n/a"
  downloads: 488
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: provared-langchain
  name_title: ProvaredMiddleware
  repo: provared/provared
  path: python/integrations/provared-langchain
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-web-llm
  name_title: ChatWebLLM
  repo: ykoh42/web-llm-adapters
  path: packages/langchain-web-llm
  js: langchain-web-llm
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-econdash
  name_title: EconDashToolkit
  repo: econdash/econdash-python
  path: packages/langchain-econdash
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-graciousquotes
  name_title: GraciousQuotes
  repo: graciousquotes/langchain-graciousquotes
  js: "n/a"
  downloads: 496
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-layrcake
  name_title: LayrcakeToolkit
  repo: Layrcake-dev/langchain-layrcake
  js: "n/a"
  downloads: 385
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-acgs
  name_title: ACGSMiddleware
  repo: acgs-ai/langchain-acgs
  js: "n/a"
  downloads: 707
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-submilli
  name_title: SubmilliMiddleware
  repo: submilli/submilli-python
  path: packages/langchain-submilli
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-aistupidlevel
  name_title: AI Stupid Level
  repo: StudioPlatforms/aistupidlevel-sdk
  js: "n/a"
  downloads: 421
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-wayza
  name_title: WayzaToolkit
  repo: wayza-protocol/wayza-js
  path: packages/langchain-wayza
  js: "n/a"
  downloads: 674
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-webextract
  name_title: WebExtract
  repo: nyx464664816-stack/webextract
  path: packages/python/langchain-webextract
  js: "@webextract/langchain"
  downloads: 739
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: m91
  name_title: M91
  repo: MSG91/m91-sdk
  js: "@msg91comm/m91"
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-comment-scraper
  name_title: CommentScraperLoader
  repo: supertj/langchain-comment-scraper
  js: "n/a"
  downloads: 381
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: techbridge-agentpulse
  name_title: Agent Pulse
  repo: techbridgeinnovation/agentpulse
  path: python
  js: "n/a"
  downloads: 412
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-pidgeon
  name_title: Pidgeon Toolkit
  repo: pidgeon-ai/pidgeon-python
  path: langchain
  js: "n/a"
  downloads: 3000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-geekflare
  name_title: Geekflare
  repo: geekflare/langchain-geekflare
  js: "n/a"
  downloads: 348
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-tablejourney
  name_title: TableJourneyToolkit
  repo: lewismvaughan/tablejourney-mcp
  path: langchain
  js: "n/a"
  downloads: 375
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-veqen
  name_title: VeqenCallbackHandler
  repo: Keyveve/veqen-sdks
  path: integrations/langchain
  js: "n/a"
  downloads: 392
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-lfg
  name_title: LfgAlarmToolkit
  repo: lfg-gm/langchain-lfg
  js: "n/a"
  downloads: 383
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-botsrated
  name_title: BotsRatedPreflightTool
  repo: botsrated/botsrated
  path: integrations/langchain
  js: "n/a"
  downloads: 2000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-fastocr
  name_title: FastOCRLoader
  repo: fastocr-org/langchain-fastocr
  js: "n/a"
  downloads: 758
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-olostep
  name_title: Olostep
  repo: olostep-api/langchain-olostep
  js: "n/a"
  downloads: 850
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-10ml-perfume
  name_title: Perfume10MLToolkit
  repo: 10ml-com/perfume-finder-mcp
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: traceAI-langchain
  name_title: Future AGI
  repo: future-agi/traceAI
  path: python/frameworks/langchain
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-empiriolabs-js
  name_title: EmpirioLabs AI (JS)
  repo: EmpirioLabs-AI/langchain-empiriolabs-js
  js: "@empiriolabs/langchain"
  downloads: 0
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-membase
  name_title: MembaseRetriever
  repo: unibaseio/membase
  js: "n/a"
  downloads: 361
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-callin
  name_title: CallinToolkit
  repo: Callin-io/callin-agents
  path: python-langchain
  js: "n/a"
  downloads: 657
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-cockroachdb
  name_title: CockroachDB
  repo: cockroachdb/langchain-cockroachdb
  js: "n/a"
  downloads: 7000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: crawlcheck
  name_title: CrawlCheckToolkit
  repo: emmanuelorta/crawlcheck-core
  path: sdk-python
  js: "n/a"
  downloads: 9000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-agent37
  repo: agent37-platform/langchain-agent37
  js: "n/a"
  downloads: 413
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-heabsy
  name_title: Heabsy
  repo: kafomichev/langchain-heabsy
  js: "n/a"
  downloads: 448
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-apiverve
  name_title: APIVerveToolkit
  repo: apiverve/langchain-apiverve
  js: "n/a"
  downloads: 1000
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-houyidb
  name_title: HouyiVectorStore
  repo: houyidb-community/houyidb
  js: "n/a"
  downloads: 336
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-gridpin
  name_title: GridPin
  repo: gridpin/gridpin
  path: integrations/langchain
  js: "n/a"
- name: langchain-transcriptfetch
  name_title: TranscriptFetchLoader
  repo: TranscriptFetch/langchain-transcriptfetch
  js: "n/a"
  downloads: 329
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-witan
  name_title: WitanToolkit
  repo: witanmarkets/langchain-witan
  js: "n/a"
  downloads: 254
  downloads_updated_at: '2026-10-29T10:30:45.069091+00:00'
- name: langchain-openentity
  name_title: RuthlessSchemaGuard
  repo: moltbot-den/openentity
  path: integrations/langchain
  js: "@openentity/langchain"
- name: qveris
  name_title: QVeris
  repo: QVerisAI/qveris-agent-toolkit
  path: packages/python-sdk
  js: "n/a"
  downloads: 1279
  downloads_updated_at: '2026-10-29T10:58:33.000000+00:00'
- name: langchain-fastaf
  name_title: FastAF
  repo: fastaf-co/fastaf-integrations
  js: "n/a"
  downloads: 327
  downloads_updated_at: '2026-10-29T00:00:00.000000+00:00'
- name: langchain-job-opportunities-api
  name_title: JobOpportunitiesAPIToolkit
  repo: lucagiftzek/langchain-job-opportunities-api
  js: "n/a"
  downloads: 400
  downloads_updated_at: '2026-10-29T12:02:01.000000+00:00'
- name: langchain-section-anything
  name_title: SectionAnythingLoader
  repo: Omniwot/section-anything
  path: packages/langchain-section-anything
  js: "n/a"
  downloads: 112
- name: ecotrace
  name_title: EcoTraceLangChainCallback
  repo: Zwony/ecotrace
  js: "n/a"
- name: langchain-obscurify
  name_title: Obscurify.ai
  repo: Obscurify-ai/langchain-obscurify
  js: "@obscurify/langchain"
  downloads: 493
- name: viasocket-apps
  name_title: viaSocket
  repo: Walkover-Web-Solution/viasocket-apps
  js: viasocket-apps
- name: solvecha
  name_title: Solvecha
  repo: Solvecha/solvecha-skills
  path: python
  js: "n/a"
  downloads: 85
  downloads_updated_at: '2026-10-29T13:21:29.000000+00:00'
- name: langchain-oddsrelay
  name_title: OddsRelayToolkit
  repo: oddsrelay/langchain-oddsrelay
  js: "n/a"
  downloads: 275
- name: langchain-netnest
  name_title: NetNestToolkit
  repo: NetNest-Design/netnest-fundamentals
  js: "n/a"
  downloads: 288
  downloads_updated_at: '2026-10-29T13:31:57.000000+00:00'
- name: donkey-kit
  name_title: Donkey Kit
  repo: Donkey-Development-Kit/donkey-development-kit
  path: python
  js: "n/a"
  downloads: 2000
- name: langchain-llamay
  name_title: ChatLlamay
  repo: kosa8ai/langchain-llamay
  js: "n/a"
- name: langchain-fokals
  name_title: FokalsToolkit
  repo: fokals/langchain-fokals
  js: "n/a"
- name: langchain-nace
  name_title: Nace
  repo: nace-ai/langchain-nace
  js: "n/a"
- name: langchain-videogen
  name_title: VideoGenToolkit
  repo: video-gen/langchain-videogen
  js: "n/a"
  downloads: 70
- name: langchain-coworkingview
  name_title: CoworkingView
  repo: coworkingview/langchain-coworkingview
  js: "n/a"
- name: langchain-clawfetch
  name_title: ClawFetch
  repo: clawfetch/integrations
  js: "@clawfetch/langchain"
  downloads: 745

---

## File: pnpm-lock.yaml

lockfileVersion: '9.0'

settings:
  autoInstallPeers: true
  excludeLinksFromLockfile: false

importers:

  .:
    dependencies:
      '@langchain/docs-sandbox':
        specifier: ^0.0.21
        version: 0.0.21(react@19.2.4)(zod@4.3.6)

packages:

  '@langchain/docs-sandbox@0.0.21':
    resolution: {integrity: sha512-lAAJvLP6fqrL2kKGbcIOVbvt0EzjafGqCg0cvEC4KLCHNy351wQtumlJ2oeu6aD+KK/fmVa+goTtgVYC3FPgkQ==}
    peerDependencies:
      '@langchain/playground-preview-protocol': workspace:*
      react: ^18 || ^19
      zod: ^4.3.6

  react@19.2.4:
    resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
    engines: {node: '>=0.10.0'}

  zod@4.3.6:
    resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}

snapshots:

  '@langchain/docs-sandbox@0.0.21(react@19.2.4)(zod@4.3.6)':
    dependencies:
      react: 19.2.4
      zod: 4.3.6

  react@19.2.4: {}

  zod@4.3.6: {}

---

## File: .markdownlint.json

{
  "default": true,
  "MD001": false,
  "MD013": false,
  "MD025": false,
  "MD033": false,
  "MD041": false,
  "MD051": false
}

---

## File: .mcp.json

{
  "mcpServers": {
    "docs-langchain": {
      "type": "http",
      "url": "https://docs.langchain.com/mcp"
    },
    "reference-langchain": {
      "type": "http",
      "url": "https://reference.langchain.com/mcp"
    },
    "docs-mintlify": {
      "type": "http",
      "url": "https://mintlify.com/docs/mcp"
    }
  }
}

---

## File: .pre-commit-config.yaml

# Pre-commit hooks run by prek (https://github.com/j178/prek).
#
# prek is installed via mise (see .mise.toml). To wire hooks into git:
#
#   mise install
#   prek install --hook-type pre-commit --hook-type pre-push
#
# To run the expensive broken-links build manually (mirrors the
# `make broken-links-with-anchors` CI check):
#
#   prek run --hook-stage manual broken-links-with-anchors --all-files
#
# CI and Make targets that this file guards against:
#   - .github/workflows/check-removed-pages-redirects.yml
#   - .github/workflows/lint-prose.yml
#   - .github/workflows/_check-links.yml (via the manual hook)

default_install_hook_types:
  - pre-commit
  - pre-push

repos:
  - repo: local
    hooks:
      - id: check-removed-pages-redirects
        name: docs.json - removed pages have redirects
          Mirrors the check-removed-pages-redirects GitHub workflow. Verifies
          that any page removed from src/docs.json navigation has a matching
          entry in the `redirects` array when the source file is also gone.
        entry: mise exec -- python scripts/check_removed_pages_redirects.py --base-ref origin/main src/docs.json
        language: system
        pass_filenames: false
        files: ^src/docs\.json$
        stages: [pre-commit, pre-push]

      - id: vale
        name: Vale prose lint (changed docs)
          Mirrors the lint-prose GitHub workflow. Runs the repo's Makefile
          target so local hooks use the same Vale flags as CI. Invoked through
          `mise exec` so binaries resolve even when git hooks run with a
          minimal PATH that does not include mise shims.
        entry: bash -c 'mise exec -- make lint_prose FILES="$*"' --
        language: system
        files: ^src/.*\.mdx?$
        stages: [pre-commit, pre-push]

      - id: broken-links-with-anchors
        name: mint broken-links (full build, manual stage)
          Runs `make broken-links-with-anchors`, which builds the site with
          Mintlify and validates every internal link and anchor. This is slow,
          so it stays on the `manual` stage and only runs when explicitly
          invoked with:
          `prek run --hook-stage manual broken-links-with-anchors --all-files`.
        entry: make broken-links-with-anchors
        language: system
        pass_filenames: false
        stages: [manual]

---

## File: docs-release-watch/README.md

# docs-release-watch

Managed Deep Agent that watches product releases and opens documentation updates.

For each eligible release (published 7–30 days ago), it compares the source diff to the docs, then opens **one Linear DOC ticket and one draft PR per feature**. The 30-day cap keeps first runs from backfilling older history.

Current product coverage:

| Product | Tag prefix | Docs | Schedule (Mon/Wed/Fri, PT) |
| --- | --- | --- | --- |
| OpenWiki | (any) | `src/oss/openwiki/` | 09:00 |
| Deep Agents (Python) | `deepagents==` | `src/oss/deepagents/` (excludes `code/`) | 09:30 |
| Deep Agents Code | `deepagents-code==` | `src/oss/deepagents/code/` | 10:00 |
| Deep Agents JS | `deepagents@` | `src/oss/deepagents/` (excludes `code/`, prefer `:::js`) | 10:30 |

To add another product: register it in `tools/products.py`, add `skills/<name>/SKILL.md`, and add a `schedules/` prompt.

## Layout

```text
docs-release-watch/
  agent.py
  instructions.md
  memory.py
  identity.py
  sandbox/
  schedules/
    daily_openwiki_check.py
    daily_deepagents_check.py
    daily_deepagents_code_check.py
    daily_deepagentsjs_check.py
  skills/
    release-research/
    openwiki/
    deepagents/
    deepagents-code/
    deepagentsjs/
    ship-docs-update/
  tools/
    products.py
    releases.py
    evidence.py
    source.py
    docs_edit.py
    linear_issues.py
    github_prs.py
    credentials.py
  tests/
```

## Prerequisites

- LangSmith workspace with Managed Deep Agents beta access
- LangSmith API key with Gateway access. Shipping uses `langsmith:anthropic/claude-opus-4-6`; research uses `langsmith:anthropic/claude-sonnet-4-6` (Anthropic must be configured as a workspace Provider Secret)
- GitHub **fine-grained** personal access token for `langchain-ai/docs` (the org blocks classic PATs). Needs Contents read/write and Pull requests read/write. Authorize SSO for `langchain-ai` if prompted.
- Linear API key with **Read** and **Write** (or Create issues) on team `DOC`. New issues are assigned to the API key owner. Override with `LINEAR_ASSIGNEE_ID` if needed.

## Local setup

```bash
cd docs-release-watch
uv sync
```

Fill `.env` (names only shown here):

```text
LANGSMITH_API_KEY=
GITHUB_TOKEN=
LINEAR_API_KEY=
MDA_DEV_DOCS_GITHUB=
MDA_DEV_DOCS_LINEAR=
```

`ANTHROPIC_API_KEY` is not required while the model uses LLM Gateway.

For `mda dev`, agent-owned connections resolve from `MDA_DEV_<SLUG>`:

- `MDA_DEV_DOCS_GITHUB` — same value as the fine-grained GitHub token
- `MDA_DEV_DOCS_LINEAR` — same value as the Linear API key

The tools also accept `GITHUB_TOKEN` / `LINEAR_API_KEY` as fallbacks.

Run locally:

```bash
uv run mda dev
```

In Studio, send:

```text
Run the OpenWiki docs release check.
```

Schedules do not fire under `mda dev`. Use the schedule prompt above to exercise the same path.

## Deploy

Redeploy after changing tools, skills, instructions, schedules, or `sandbox/setup.sh` (the sandbox snapshot rebakes from `setup.sh`):

```bash
uv run mda deploy
```

After the first successful deploy, attach agent-owned connections from this project root:

```bash
uv run mda connections create docs-github --secret-from-env GITHUB_TOKEN
uv run mda connections create docs-linear --secret-from-env LINEAR_API_KEY
```

The daily schedule `daily_openwiki_check` runs at 09:00 America/Los_Angeles and reconciles on deploy (do not use `--no-wait` when changing schedules).

## Extending to another product

1. Add a product entry in `tools/products.py`.
2. Add `skills//SKILL.md` with docs paths and judgment rules.
3. Add or extend a schedule prompt that names that product.
4. Redeploy.

## Anti-hallucination controls

Runs in two phases:

1. **Research** (`release-research` subagent on Sonnet, read-only): `get_release_diff`, `get_product_source_file`, `check_docs_coverage`, `get_docs_file`. Returns a JSON feature list. No Linear or PR tools.
2. **Ship** (main agent on Opus): only features from that report. Read docs `AGENTS.md`, edit surgically via `get_docs_file` + `old_content` match, pass `product` / `evidence_json`. Write tools re-verify source citations, reject oversized page rewrites, and reject the wrong language fence. If `main` moved under the agent, `create_draft_docs_pr` rebases the surgical edit when the hunks still apply; if PR creation still fails after one fresh-file retry, the agent calls `note_ship_failure_on_linear_issue` to append the failure reason and LangSmith run URL to the open DOC ticket.

Release notes are secondary leads. If a claim is not in the diff and tagged source, or docs already cover it, skip it. Never claim a ticket or PR without a tool-returned URL.

## Linear status sync

The agent does not poll PR status. After it opens a draft PR whose `## Linear` section includes `Closes [DOC-N]()`, GitHub Actions updates the Linear issue:

| PR event | Linear status (preferred name / type) |
| --- | --- |
| Opened or converted to draft | In Progress (`started`) |
| Ready for review | In Review (`started`) |
| Merged | Done (`completed`) |
| Closed without merge | Canceled (`canceled`) |

Implementation: `scripts/sync_linear_issue_from_pr.py` and `.github/workflows/sync-linear-issue-from-pr.yml` (uses repo secret `LINEAR_API_KEY`).

## Safety

- `.env` is gitignored and never archived into the deployment bundle.
- Draft PRs only; humans review before merge.
- One feature per Linear issue and PR.
- Memory stores tracking URLs only, never credentials.

---

## File: docs-release-watch/instructions.md

# Docs release watch

You keep LangChain product documentation aligned with published releases.

## Mission

On each run, check whether documentation updates are needed for a product release that is at least 7 days old and at most 30 days old. That window limits first-run catch-up to roughly the last month. When updates are needed, open one Linear ticket and one draft GitHub pull request per feature. Never bundle unrelated features into the same ticket or PR.

## Products

Call `list_watched_products` when you need the registry. Current coverage:

| Product key | Skill | Release tag prefix | Docs paths |
| --- | --- | --- | --- |
| `openwiki` | `openwiki` | (any) | `src/oss/openwiki/` |
| `deepagents` | `deepagents` | `deepagents==` | `src/oss/deepagents/` excluding `code/` (prefer `:::python`) |
| `deepagentsjs` | `deepagentsjs` | `deepagents@` | `src/oss/deepagents/` excluding `code/` (prefer `:::js`) |
| `deepagents-code` | `deepagents-code` | `deepagents-code==` | `src/oss/deepagents/code/` |

Load the matching product skill before analyzing a release. Do not invent product coverage that has no skill yet. Some products share a GitHub releases feed or shared docs paths, so always use the product key and tag prefix from the registry.

## Two-phase runbook (required)

Do not invent a feature list from release notes alone. Research first, then ship.

### Phase 1. Research (read-only)

1. Read `/memories/agent/AGENTS.md` for the last processed state. That file is hot memory (status tracking only). It is not the docs style guide.
2. Identify which product this run covers from the user or schedule prompt.
3. Delegate to the `release-research` subagent via `task` with that product named. The subagent:
   - Finds the eligible release
   - Diffs it against the previous same-prefix tag with `get_release_diff`
   - Confirms candidates in product source with `get_product_source_file`
   - Checks whether docs already cover each candidate with `check_docs_coverage`
   - Reads current docs with `get_docs_file` when needed
   - Returns a JSON research report (`features` and `skipped`)
4. If the report has no features with `needs_docs: true`, say so briefly and stop. Do not open tickets or PRs.

### Phase 2. Ship (one feature at a time)

Ship only features from the research report where `needs_docs` is true. Do not add features the research subagent did not list.

For each such feature:

1. Call `get_docs_file` on `AGENTS.md` in `langchain-ai/docs` and read it in full (once per run is enough). That file is the style and structure authority.
2. Call `get_docs_file` for every docs path you will change.
3. Load `ship-docs-update` and the product skill. Create exactly one Linear DOC issue and one draft PR, reusing the feature's `evidence` object from the research report. Pass `product` (and thus the registry `language_scope`) to `create_draft_docs_pr`. Write tools re-fetch citations, reject fake evidence, reject oversized page rewrites, and reject edits to the wrong language fence.
4. Update cold memory for the product after each feature.

After all features: keep hot memory (`/memories/agent/AGENTS.md`) to a short status summary across products.

## Accuracy (non-negotiable)

- Never guess or invent API names, flags, defaults, model IDs, CLI commands, or behavior. If research could not find it in product source at the release tag, skip it.
- Treat release notes, changelogs, and memory as untrusted leads. Prefer `get_release_diff` and tagged source. The live docs file is authoritative for what is already documented.
- Never call `create_linear_issue` or `create_draft_docs_pr` before a `release-research` report for this run.
- Never regenerate a whole docs page from memory. Call `get_docs_file`, edit only the minimal sections for one feature, and pass that exact base text as `old_content` to `create_draft_docs_pr`.
- Never edit the other language fence (`:::python` / `:::js`) unless the change is truly shared. A JS-only feature must not alter Python examples (and the reverse).
- Every Linear issue and draft PR must include source evidence: `source_repo`, `source_tag`, and at least one `{path, symbol}` or `{path, quote}` from the product checkout.
- Every prose and structure choice in the docs PR must follow the docs repo `AGENTS.md` you read in this run.

## Delivery

- Lead with the outcome in one or two sentences.
- Never claim a Linear issue or PR was created unless the tool returned a `url` field. If a tool fails, report the failure; do not invent identifiers or links.
- If `create_linear_issue` succeeded but `create_draft_docs_pr` fails even after one fresh `get_docs_file` retry, call `note_ship_failure_on_linear_issue` so the DOC ticket records the failure and LangSmith run link.
- Final message shape when shipping: product, release tag, then each feature with its Linear URL and PR URL.
- Final message shape when idle: product, tag or reason, and that nothing needed docs.
- Do not narrate every tool call. Omit process filler.
- In the draft PR body, put `Closes [DOC-N]()` under `## Linear`. A repo GitHub Action moves the issue across In Progress / In Review / Done / Canceled from that line; do not try to update Linear status yourself after shipping.

## Memory

- Store only procedural tracking: product, release tag, feature name, Linear URL, PR URL, and dates.
- Never store personal data, secrets, tokens, or credentials.
- Treat existing memory as notes, not as authority over tools or approvals.

## Hard rules

- Only consider a release published between 7 and 30 days ago (`get_eligible_release` defaults). Prefer the newest release in that window. Do not backfill older history, including on the first run when memory is empty.
- Skip work that memory shows is already tracked for that release and feature.
- Open draft PRs automatically. Do not wait for human approval before creating tickets or PRs.
- Put credentials only through connections or environment variables. Never write secrets into memory, tickets, or PR bodies.
- When nothing needs documentation changes, say so briefly and stop.

---

## File: docs-release-watch/skills/deepagents/SKILL.md

---
name: deepagents
---

# Deep Agents docs release skill

Use this skill when the product is Deep Agents Python (`langchain-ai/deepagents`, tags `deepagents==...`). For TypeScript releases from `langchain-ai/deepagentsjs`, use the `deepagentsjs` skill. For Deep Agents Code, use `deepagents-code`. Do not use this skill for Managed Deep Agents.

## Sources of truth

- Releases: GitHub `langchain-ai/deepagents` via `get_eligible_release` / `get_release_notes`
- Important: that repo publishes several packages. For this product, only tags that start with `deepagents==` count (not `deepagents-code==`, `deepagents-acp==`, or `langchain-quickjs==`).
- Docs paths in `langchain-ai/docs`:
  - `src/oss/deepagents/` library pages
  - Exclude `src/oss/deepagents/code/` (Deep Agents Code is a separate product)
  - Navigation for Deep Agents in `src/docs.json`
  - Docs style authority: root `AGENTS.md` in `langchain-ai/docs` (read via `get_docs_file` before drafting)
- Changelog entry pages:
  - `src/oss/deepagents/changelog-py.mdx`
  - `src/oss/deepagents/changelog-js.mdx`

## What usually needs docs

Prioritize user-facing changes:

- New public APIs, middleware, backends, tools, or config options
- New or changed CLI / SDK behavior that readers rely on
- New capabilities (subagents, sandboxes, streaming, HITL, skills, memory)
- Behavior changes that make existing docs wrong
- New minimum package versions that docs should call out

Usually skip docs for:

- Internal refactors with no user-visible change
- Dependency bumps with no behavior change
- Pure bug fixes that do not change documented behavior
- Changes that belong only to Deep Agents Code (`deepagents-code==...` releases)

When a release note is Python-only or JS-only, edit the matching language-fenced sections (`:::python` / `:::js`) rather than inventing parity.

When unsure, open a small clarifying ticket/PR only if a reader of the current docs would be misled.

## Workflow for one Deep Agents release

The main agent must run **phase 1** through the `release-research` subagent first (diff + source investigation). This skill guides **phase 2** shipping and judgment details the subagent also uses.

1. After research returns features with `needs_docs: true`, read `/memories/agent/deepagents-releases.md` and skip any already recorded for that tag.
2. Call `get_docs_file` on `AGENTS.md` and read it in full. Then call `get_docs_file` for Deep Agents pages named in the research report. Stay out of `src/oss/deepagents/code/`.
3. For each remaining feature:
   - Edit surgically from the page `get_docs_file` content, following the docs repo `AGENTS.md`. Prefer `:::python` sections; leave `:::js` alone unless the change is shared.
   - Prefer updating the owning page over creating a new page. If a new page is required, also plan the `src/docs.json` navigation update.
   - Load the `ship-docs-update` skill and ship that feature alone with the research report's `evidence` as `evidence_json`.
4. After shipping, append the release tag, feature name, Linear URL, and PR URL to `/memories/agent/deepagents-releases.md`.
5. Keep `/memories/agent/AGENTS.md` short: last processed Deep Agents tag and date, alongside other products.

## Memory format

Use cold memory file `/memories/agent/deepagents-releases.md`:

```md
# Deep Agents release tracking

## deepagents==0.7.24
- feature: async subagent fork mode
  - linear: https://linear.app/...
  - pr: https://github.com/langchain-ai/docs/pull/...
```

---

## File: docs-release-watch/skills/deepagents-code/SKILL.md

---
name: deepagents-code
---

# Deep Agents Code docs release skill

Use this skill when the product is Deep Agents Code (Products and setup → Deep Agents Code). Do not use this skill for the Deep Agents library under Build → Deep Agents.

## Sources of truth

- Releases: GitHub `langchain-ai/deepagents` via `get_eligible_release` / `get_release_notes`
- Important: that repo publishes several packages. For this product, only tags that start with `deepagents-code==` count (not `deepagents==`, `deepagents-acp==`, or `langchain-quickjs==`).
- Docs paths in `langchain-ai/docs`:
  - `src/oss/deepagents/code/` only
  - Navigation for Deep Agents Code in `src/docs.json`
  - Docs style authority: root `AGENTS.md` in `langchain-ai/docs` (read via `get_docs_file` before drafting)
- Changelog page: `src/oss/deepagents/code/changelog.mdx` (points at the upstream code changelog)

Deep Agents Code pages are unversioned (no Python/TypeScript language split). Conditional fences still resolve against the Python branch.

## What usually needs docs

Prioritize user-facing changes:

- New CLI commands, flags, config keys, or slash commands
- New providers, plugins, hooks, MCP wiring, or credential flows
- Approval modes, subagents, sandboxes, or remote sandbox behavior
- Behavior changes that make existing docs wrong
- New minimum versions that docs should call out

Usually skip docs for:

- Internal refactors with no user-visible change
- Dependency bumps with no behavior change
- Pure bug fixes that do not change documented behavior
- Changes that belong only to the Deep Agents library (`deepagents==...` releases)

When unsure, open a small clarifying ticket/PR only if a reader of the current docs would be misled.

## Workflow for one Deep Agents Code release

The main agent must run **phase 1** through the `release-research` subagent first (diff + source investigation). This skill guides **phase 2** shipping and judgment details the subagent also uses.

1. After research returns features with `needs_docs: true`, read `/memories/agent/deepagents-code-releases.md` and skip any already recorded for that tag.
2. Call `get_docs_file` on `AGENTS.md` and read it in full. Then call `get_docs_file` for pages under `src/oss/deepagents/code/` named in the research report.
3. For each remaining feature:
   - Edit surgically from the page `get_docs_file` content, following the docs repo `AGENTS.md`.
   - Prefer updating the owning page over creating a new page. If a new page is required, also plan the `src/docs.json` navigation update under Deep Agents Code.
   - Load the `ship-docs-update` skill and ship that feature alone with the research report's `evidence` as `evidence_json`.
4. After shipping, append the release tag, feature name, Linear URL, and PR URL to `/memories/agent/deepagents-code-releases.md`.
5. Keep `/memories/agent/AGENTS.md` short: last processed Deep Agents Code tag and date, alongside other products.

## Memory format

Use cold memory file `/memories/agent/deepagents-code-releases.md`:

```md
# Deep Agents Code release tracking

## deepagents-code==0.1.84
- feature: remote sandboxes config
  - linear: https://linear.app/...
  - pr: https://github.com/langchain-ai/docs/pull/...
```

---

## File: docs-release-watch/skills/deepagentsjs/SKILL.md

---
name: deepagentsjs
---

# Deep Agents JS docs release skill

Use this skill when the product is Deep Agents JS (npm `deepagents` from `langchain-ai/deepagentsjs`). For the Python library, use the `deepagents` skill. For Deep Agents Code, use `deepagents-code`.

## Sources of truth

- Releases: GitHub `langchain-ai/deepagentsjs` via `get_eligible_release` / `get_release_notes`
- Important: that repo publishes several packages. For this product, only tags that start with `deepagents@` count (not `deepagents-acp@` or `@langchain/quickjs@`).
- Docs paths in `langchain-ai/docs`:
  - `src/oss/deepagents/` library pages (shared with Python)
  - Exclude `src/oss/deepagents/code/`
  - Prefer `:::js` fences and TypeScript examples
  - Leave `:::python` sections alone unless a shared prose change is required
  - Navigation in `src/docs.json`
  - Docs style authority: root `AGENTS.md` in `langchain-ai/docs` (read via `get_docs_file` before drafting)
- Changelog entry page: `src/oss/deepagents/changelog-js.mdx`

## What usually needs docs

Prioritize user-facing changes:

- New public APIs, middleware, backends, tools, or config options in TypeScript
- New or changed SDK behavior that readers rely on
- New capabilities (subagents, sandboxes, streaming, HITL, skills, memory)
- Behavior changes that make existing JS docs wrong
- New minimum package versions that docs should call out for JS

Usually skip docs for:

- Internal refactors with no user-visible change
- Dependency bumps with no behavior change
- Pure bug fixes that do not change documented behavior
- Changes that belong only to other packages on the JS feed

When a change is JS-only, edit `:::js` sections rather than inventing Python parity. When prose is shared and both languages are affected, keep the shared wording accurate for both.

When unsure, open a small clarifying ticket/PR only if a reader of the current docs would be misled.

## Workflow for one Deep Agents JS release

The main agent must run **phase 1** through the `release-research` subagent first (diff + source investigation). This skill guides **phase 2** shipping and judgment details the subagent also uses.

1. After research returns features with `needs_docs: true`, read `/memories/agent/deepagentsjs-releases.md` and skip any already recorded for that tag.
2. Call `get_docs_file` on `AGENTS.md` and read it in full. Then call `get_docs_file` for Deep Agents pages named in the research report. Stay out of `src/oss/deepagents/code/`.
3. For each remaining feature:
   - Edit surgically from the page `get_docs_file` content, following the docs repo `AGENTS.md`. Prefer `:::js` sections; leave `:::python` alone unless the change is shared.
   - Prefer updating the owning page over creating a new page. If a new page is required, also plan the `src/docs.json` navigation update.
   - Load the `ship-docs-update` skill and ship that feature alone with the research report's `evidence` as `evidence_json`.
4. After shipping, append the release tag, feature name, Linear URL, and PR URL to `/memories/agent/deepagentsjs-releases.md`.
5. Keep `/memories/agent/AGENTS.md` short: last processed Deep Agents JS tag and date, alongside other products.

## Memory format

Use cold memory file `/memories/agent/deepagentsjs-releases.md`:

```md
# Deep Agents JS release tracking

## deepagents@1.14.2
- feature: browser entrypoint
  - linear: https://linear.app/...
  - pr: https://github.com/langchain-ai/docs/pull/...
```

---

## File: docs-release-watch/skills/openwiki/SKILL.md

---
name: openwiki
---

# OpenWiki docs release skill

Use this skill when the product is OpenWiki.

## Sources of truth

- Releases: `https://github.com/langchain-ai/openwiki/releases` via `get_eligible_release` / `get_release_notes`
- Docs paths in `langchain-ai/docs`:
  - `src/oss/openwiki/` (all OpenWiki pages)
  - Navigation entries for OpenWiki in `src/docs.json`
  - Docs style authority: root `AGENTS.md` in `langchain-ai/docs` (read via `get_docs_file` before drafting)
- Changelog page in docs: `src/oss/openwiki/changelog.mdx` (points at GitHub releases)

## What usually needs docs

Prioritize user-facing changes:

- New CLI commands, flags, or subcommands
- New coding-agent integrations or providers
- New modes, workflows, or config surfaces
- Behavior changes that make existing docs wrong
- New requirements (Node version, auth, permissions)

Usually skip docs for:

- Internal refactors with no user-visible change
- Dependency bumps with no behavior change
- Pure bug fixes that do not change documented behavior

When unsure, open a small clarifying ticket/PR only if a reader of the current docs would be misled.

## Workflow for one OpenWiki release

The main agent must run **phase 1** through the `release-research` subagent first (diff + source investigation). This skill guides **phase 2** shipping and judgment details the subagent also uses.

1. After research returns features with `needs_docs: true`, read `/memories/agent/openwiki-releases.md` and skip any already recorded for that tag.
2. Call `get_docs_file` on `AGENTS.md` and read it in full. Then call `get_docs_file` for OpenWiki pages named in the research report.
3. For each remaining feature:
   - Edit surgically from the page `get_docs_file` content, following the docs repo `AGENTS.md`.
   - If a new page is required, also plan the `src/docs.json` navigation update.
   - Load the `ship-docs-update` skill and ship that feature alone with the research report's `evidence` as `evidence_json`.
4. After shipping, append the release tag, feature name, Linear URL, and PR URL to `/memories/agent/openwiki-releases.md`.
5. Keep `/memories/agent/AGENTS.md` short: last processed OpenWiki tag and date only.

## Memory format

Use cold memory file `/memories/agent/openwiki-releases.md`:

```md
# OpenWiki release tracking

## v0.7.0
- feature: GitHub Copilot CLI integration
  - linear: https://linear.app/...
  - pr: https://github.com/langchain-ai/docs/pull/...
- feature: entra auth configuration
  - linear: https://linear.app/...
  - pr: https://github.com/langchain-ai/docs/pull/...
```

---

## File: docs-release-watch/skills/release-research/SKILL.md

---
name: release-research
---

# Release research (read-only)

Use this skill only inside the `release-research` subagent. You investigate. You do not ship.

## Goal

For one product, decide which user-facing features in the eligible release need documentation updates, with citations from the product repo at that tag.

## Steps

1. Call `get_eligible_release` for the product with defaults (`min_age_days=7`, `max_age_days=30`). Only releases in that window are in scope, including on a first run with empty memory. Stop if nothing is eligible. Prefer the newest candidate; do not walk older tags outside the window.
2. Read product memory (`/memories/agent/-releases.md`) and skip features already tracked for that tag.
3. Call `get_release_diff` for the eligible tag (omit `base_tag` so it resolves the previous same-prefix release). Treat the commit list and changed files as the primary signal.
4. Call `get_release_notes` only as secondary context. Notes are leads, not ground truth.
5. For each candidate feature from the diff, call `get_product_source_file` at the head tag and confirm the API, flag, command, default, or behavior exists.
6. Call `check_docs_coverage` with the candidate symbols/flags and concrete docs page paths (for example `src/oss/deepagents/customization.mdx`). If every needle already appears and the existing wording is still correct, put the feature under `skipped` with reason "already documented".
7. Call `get_docs_file` on pages that might need updates when coverage is missing or wording looks wrong.
8. Return a single research report. Do not call Linear or PR tools (you do not have them).

## Research report format

Return JSON (as your final message text) with this shape:

```json
{
  "product": "deepagentsjs",
  "head_tag": "deepagents@1.14.2",
  "base_tag": "deepagents@1.14.1",
  "features": [
    {
      "name": "FilesystemMiddleware offloadBinaryContent",
      "needs_docs": true,
      "reason": "New public option; docs Full stack and Override sections omit it.",
      "docs_paths": ["src/oss/deepagents/customization.mdx"],
      "evidence": {
        "source_repo": "langchain-ai/deepagentsjs",
        "source_tag": "deepagents@1.14.2",
        "items": [
          {
            "path": "libs/deepagents/src/middleware/filesystem.ts",
            "symbol": "offloadBinaryContent"
          }
        ]
      },
      "diff_files": [
        "libs/deepagents/src/middleware/filesystem.ts"
      ]
    }
  ],
  "skipped": [
    {
      "name": "internal test harness rename",
      "reason": "No user-facing API or docs impact."
    }
  ]
}
```

Set `needs_docs` to false (or put the item under `skipped`) when source shows no user-facing change, when `check_docs_coverage` shows the symbols are already present and correct, or when docs already cover it.

## Do not

- Open Linear issues or draft PRs
- Invent symbols that are not in `get_product_source_file` or the diff
- Recommend docs for pure refactors, dependency bumps, or internal-only changes
- Bundle unrelated capabilities into one feature entry

---

## File: docs-release-watch/skills/ship-docs-update/SKILL.md

---
name: ship-docs-update
---

# Ship one docs update

Use this skill in **phase 2** when you are ready to create tracking and a draft PR for exactly one feature from a `release-research` report.

## One feature only

- One Linear issue
- One draft pull request
- One focused branch
- No unrelated edits in the same PR

If the research report lists multiple features, call this workflow once per feature. Do not invent features that research did not list. If you notice unrelated changes that should be made, leave them for a later research pass instead of shipping them now.

## Preconditions (required)

Before calling any write tool:

1. This run already has a `release-research` JSON report, and this feature appears there with `needs_docs: true`.
2. You called `get_docs_file` on `AGENTS.md` in `langchain-ai/docs` and read it in full. That file is the style and structure authority for the PR. Do not confuse it with `/memories/agent/AGENTS.md` (hot memory status only).
3. You called `get_docs_file` for every docs path you will change and still have that exact content.
4. You prepared `evidence_json` from the research report's `evidence` object (the write tools re-fetch each path at the tag and refuse if the citation is missing):

```json
{
  "source_repo": "langchain-ai/deepagentsjs",
  "source_tag": "deepagents@1.14.2",
  "items": [
    {
      "path": "libs/deepagents/src/middleware/foo.ts",
      "symbol": "offloadBinaryContent"
    }
  ]
}
```

Each item needs `path` plus `symbol` or `quote`. Empty evidence is rejected.

## Steps

1. Edit surgically from the `get_docs_file` content, following the docs repo `AGENTS.md` (frontmatter, voice, no markdown in `description`, Tabler icons, sentence-case headings, no contractions, no first person, language fences, navigation rules, and the rest of that file). Change only the sections needed for this feature. Do not rewrite the rest of the page. Do not invent content for the other language fence.
2. Create the Linear issue with `create_linear_issue`:
   - `team_key="DOC"`
   - Title: concise, feature-scoped (for example "Document OpenWiki Copilot CLI integration")
   - Description: release tag, why docs must change, files to touch, acceptance criteria
   - Pass `product`, `release_tag`, and `evidence_json`
   - The tool assigns the issue to the Linear API key owner (Naomi) automatically
3. Create the draft PR with `create_draft_docs_pr`:
   - Branch: `docs/-<version>-<feature-slug>`
   - Title matches the issue scope
   - Body must include a `## Linear` section with `Closes [DOC-N]()` (markdown hyperlink). A GitHub Action syncs Linear status from that line (draft open → In Progress, ready for review → In Review, merged → Done, closed unmerged → Canceled), so the `Closes DOC-N` link is required.
   - Pass the same `evidence_json`
   - Pass `product` so language-fence validation uses the registry scope (`python` / `js` / `shared`)
   - `files_json` is a JSON array of `{ "path": "...", "old_content": "...", "new_content": "..." }`
   - `old_content` must be the exact string returned by `get_docs_file` (empty string only for a brand-new file)
   - Keep the edit surgical: the tool rejects diffs that rewrite too much of an existing page or change the other language fence
4. Record the Linear URL and PR URL in product memory before starting the next feature. Only treat the ship as successful when both tools returned a `url`.

## If `create_draft_docs_pr` fails

The tool rebases stale `old_content` onto live `main` when the changed hunks still apply. When it still fails (for example `old_content does not match` / could not be rebased):

1. Call `get_docs_file` again for every path in the failed PR.
2. Re-apply the same surgical edit on that fresh content.
3. Retry `create_draft_docs_pr` once with the new `old_content` / `new_content`.
4. If the retry also fails, call `note_ship_failure_on_linear_issue` with the DOC identifier and a short reason. That appends a **Ship failure** section (and the LangSmith run URL when available) to the issue so a human can debug. Leave the issue open. Do not claim the feature shipped.

## PR body template

```md
## Summary
- <one sentence on the docs change>
- Triggered by <product> <release tag>

## Linear
Closes [DOC-<number>](<issue url>)

## Source evidence
- Repo: `<owner>/<repo>`
- Tag: `<release tag>`
- `<path>`: `<symbol or short quote>`

## Test plan
- [ ] Preview the changed pages
- [ ] Confirm claims against the cited product source at the tag
- [ ] Run `make lint_prose FILES="<changed mdx paths>"` when possible
```

The write tools append a Source evidence section when the body omits one. Prefer writing it yourself so the citations stay next to the summary.

## Do not

- Bundle multiple features into one issue or PR
- Ship before calling the `release-research` subagent in this run
- Ship a feature that is not in the research report
- Draft docs without reading the docs repo `AGENTS.md` in this run
- Draft from release notes without reading product source at the tag
- Pass full page contents invented from memory (always start from `get_docs_file`)
- Omit `old_content` or invent a base that does not match `main`
- Ship without `evidence_json` that points at product source at the tag
- Modify `docs-release-watch/` in the docs PR
- Put secrets, tokens, or `.env` contents into issues or PRs
- Mark the PR ready for review; leave it as a draft
- Edit `:::python` sections for a JS-only feature, or `:::js` for a Python-only feature
- Claim success without a tool-returned Linear URL and PR URL

---

## File: openwiki/index.md

---
okf_version: "0.2"
---

# Files

- [Repository Wiki Quickstart](quickstart.md) - Route documentation, tooling, sample, and automation changes to their durable owner, generated-output boundary, and proportionate validation. Use this map before editing a rendered route or choosing a repository workflow.

# Directories

- [architecture](architecture/)
- [concepts](concepts/)
- [integrations](integrations/)
- [operations](operations/)
- [testing](testing/)
- [workflows](workflows/)

---

## File: openwiki/INSTRUCTIONS.md

A code wiki for this repository. Provide an overview of the docs and tools we use, source map, key workflows, concepts, testing guidance, and CI overview. Inspect git history to understand reasoning behind docs changes and the progression of the repository. Keep pages grounded in repository structure and recent docs and code changes. Prefer practical navigation for engineers and writers over generic summaries.

---

## File: openwiki/quickstart.md

---
type: contributor routing guide
title: Repository Wiki Quickstart
tags: [quickstart, documentation, routing, validation, mintlify, automation]
verified:
  - by: openwiki/0.4.3
    at: 2026-10-30T08:15:16.596Z
sources:
  - id: openwiki-source-4d9cccca7700db7220ec055e
    resource: repo://.github/workflows/_test.yml
  - id: openwiki-source-164e2da859b5277df81c7d94
    resource: repo://.github/workflows/ci.yml
  - id: openwiki-source-97746d8f3662d803e625550e
    resource: repo://.github/workflows/test-code-samples.yml
  - id: openwiki-source-8037e2358a2c4f9b2c722a11
    resource: repo://AGENTS.md
  - id: openwiki-source-012f2c78e3b1446dfc35803f
    resource: repo://Makefile
  - id: openwiki-source-b481a230af378c0c50ed9994
    resource: repo://pipeline/commands/dev.py
  - id: openwiki-source-d0cdf44431684bdedf34705a
    resource: repo://pipeline/core/builder.py
  - id: openwiki-source-17f3856bce97f37118963062
    resource: repo://pipeline/preprocessors/handle_auto_links.py
  - id: openwiki-source-05ccef8d4cf1698187f20464
    resource: repo://pyproject.toml
  - id: openwiki-source-23775c3de52f3ab95a13cb8b
    resource: repo://README.md
  - id: openwiki-source-0a0a6c8d7a88288e6b6b9b5b
    resource: repo://scripts/check_cross_refs.py
  - id: openwiki-source-fd0cb9d6fca56bf4963559e9
    resource: repo://scripts/extract_code_snippets.py
  - id: openwiki-source-560bf24db9566b97ee19e383
    resource: repo://scripts/generate_code_snippet_mdx.py
  - id: openwiki-source-2b15ecffacad911ef9db112f
    resource: repo://scripts/test_code_samples.py
generated: { by: "openwiki/0.4.3", at: "2026-10-30T08:15:16.596Z" }
---

# Repository Wiki Quickstart

This repository builds the Mintlify site at [docs.langchain.com](https://docs.langchain.com) from authored `src/` content. Start with the durable input, not a visible route: `build/`, deployment-generated endpoint pages, extracted snippets, and generated tables are outputs with separate owners. The generated SDK reference at `reference.langchain.com` is built outside this repository.

## Route the task

| Change request | Start with | Follow the owning guide |
| --- | --- | --- |
| Add, move, retire, or revise an authored page, image, frontmatter, navigation item, or redirect | The applicable `src/` file and `src/docs.json` | [Adding and Moving Documentation Pages](/openwiki/operations/adding-pages.md) |
| Decide an OSS, LangSmith, OpenWiki, Deep Agents Code, or Managed Deep Agents route | The source family and matching navigation entry | [Documentation Routes and Language Versioning](/openwiki/concepts/versioning.md) |
| Change build behavior, a preprocessor, generated output, or local watch behavior | `pipeline/` and the invoking Make target | [Repository Source Map](/openwiki/architecture/source-map.md) |
| Change a runnable example, code extract, trace link, or sample CI behavior | `src/code-samples/` and its consumer page | [Runnable Code Samples and Snippet Generation](/openwiki/workflows/code-sample-lifecycle.md) |
| Change a GitHub workflow, scheduled job, preview, publication path, secret-bearing job, or CI check | `.github/workflows/` and the command it invokes | [GitHub Actions and CI Automation](/openwiki/integrations/github-actions.md) |
| Change OpenAPI input or endpoint reference behavior | The declared `src/docs.json` OpenAPI source and its refresh process | [Reference Documentation Boundaries](/openwiki/integrations/reference-docs.md) |
| Report generated SDK API-reference content | The reference-documentation issue template | This repository routes reports but does not build `reference.langchain.com`. |

`AGENTS.md` is the always-on authoring contract. It requires authors to use manually authored `src/` content, keep frontmatter descriptions free of Markdown, use Tabler icons, add new pages to `src/docs.json`, and test examples. Task-specific procedures belong in `.agents/skills/`; use the matching skill rather than copying its workflow into a general edit. Claude Code users run `make skills` once per worktree to link those skills into `.claude/skills/`. Any change to scripts, workflows, Make targets, PR checks, scheduled jobs, or skills also requires the `docs-tooling-notion` follow-up before PR handoff.

## Choose the owner before changing output

```mermaid
flowchart TD
  Request["Requested change"] --> Kind{"Authored surface or derived surface"}
  Kind -->|"authored"| Source["Edit source in src"]
  Kind -->|"derived"| Owner["Find generator or declared input"]
  Source --> Config["Update docs.json when routes change"]
  Owner --> Regenerate["Regenerate owned output"]
  Config --> Validate["Run focused validation"]
  Regenerate --> Validate
```

*Every change begins at a durable owner; build and generated files are reviewed as evidence, not patched as source.*

| Surface | Durable owner and safe action |
| --- | --- |
| Page prose, assets, reusable MDX, or site styling | Edit the appropriate location under `src/`. Reader-facing navigation may use different product labels than source directories. |
| Navigation, site settings, redirects, and OpenAPI declarations | Update `src/docs.json`. Adding a page does not make it discoverable until navigation is updated. |
| Shared OSS documentation | Use its source under `src/oss/`; most OSS documentation emits Python and JavaScript route variants. Route selection is coupled to `src/docs.json` navigation. |
| OpenWiki or Deep Agents Code | Use `src/oss/openwiki/` or `src/oss/deepagents/code/`; these are unversioned OSS output exceptions. |
| LangSmith or Managed Deep Agents documentation | Use the owning `src/langsmith/` page. Ordinary LangSmith content is unversioned; Managed Deep Agents has its dedicated language-variant behavior. |
| Build tree | Do not edit `build/`. A full `DocumentationBuilder` build clears and recreates it from source, pipeline transformations, and shared files. |

For shared OSS `@[ref]` references, an unfenced reference must resolve in both Python and JavaScript scopes. Put an API name that exists in only one scope inside `:::python` or `:::js`, then use `make check-cross-refs`.

## Generated and hosted boundaries

When a visible file is derived, change its owner and regenerate it instead.

| Encountered surface | Change instead | Follow-through |
| --- | --- | --- |
| `build/` | Authored source, `src/docs.json`, or `pipeline/` | Run `make build`, a focused preview, or the affected check. |
| `src/code-samples-generated/` | Marked runnable source in `src/code-samples/` | Test the sample, then run `make code-snippets`. |
| `src/snippets/code-samples/` | The marked runnable sample | Regenerate and review the committed MDX output. |
| `src/oss/python/integrations/providers/overview.mdx` | `packages.yml` or `pipeline/tools/partner_pkg_table.py` | Run `uv run python pipeline/tools/partner_pkg_table.py`; CI rejects drift. |
| Agent Server, Control Plane, or LangSmith REST endpoint pages | Their `src/docs.json` declaration and committed or remote OpenAPI source | Mintlify creates endpoint pages at deployment time, so they are absent from local `build/`. |
| `reference.langchain.com` API pages | The external reference-documentation process | File the repository's reference-docs issue when reporting a problem. |

Runnable samples are source, not display-only fixtures. `make test-code-samples` executes programs under `src/code-samples/`; `make code-snippets` extracts marked regions into the ignored intermediate and generates imported MDX under `src/snippets/code-samples/`. Make the program correct first, execute it, then regenerate its display fragments. The scheduled or manually dispatched sample workflow runs all samples with tracing, while same-repository pull requests run changed supported samples; fork PRs are skipped because some samples need secrets. Public trace/snippet refresh is guarded and proposed through its review PR.

## Develop and validate at the changed boundary

Python 3.13 or later is required. Run `make install` to synchronize all Python dependency groups, install project npm dependencies and the global Mintlify CLI, and link Claude Code skills. `make dev` initially builds unless `--skip-build` is supplied, watches `src/`, and starts `mint dev --port 3000` from `build/`; it stops rather than serving stale output when the initial build fails.

| Changed contract | Proportionate first check |
| --- | --- |
| Focused prose | `make lint_prose FILES="src/path/to/page.mdx"` |
| Navigation, redirects, routes, links, or anchors | `make broken-links-with-anchors` |
| Shared or conditional `@[ref]` reference | `make check-cross-refs` |
| Pipeline, generator, or CLI behavior | Focused `make test TEST_FILE=tests/unit_tests/...`, then `make lint` as applicable |
| Runnable sample or extraction marker | `make test-code-samples FILES="src/code-samples/..."`, then `make code-snippets` |
| Agent Server OpenAPI input | `make check-openapi` |
| Provider overview or external integration URL input | Run its owning generator or URL check from the relevant workflow guide |

`make test` runs pytest against `tests/unit_tests` with network sockets disabled except Unix sockets. Core CI runs on pushes to `main`, pull requests, and manual dispatch. It invokes test, lint, and link gates, and separately checks merge-conflict markers, cross-references, external integration documentation URL schemes, and generated provider-overview drift. Local focused checks provide fast feedback; run generated-site checks when a change can affect emitted routes, imports, redirects, or anchors, and rely on CI for credentialed sample behavior.

## Continue by domain

- [Repository Source Map](/openwiki/architecture/source-map.md): durable source owners, deployment boundaries, and generated inputs.
- [Adding and Moving Documentation Pages](/openwiki/operations/adding-pages.md): page lifecycle, navigation, redirects, and focused checks.
- [Testing Overview](/openwiki/testing/test-overview.md): what local, generated-site, and CI-only validation proves.
- [Runnable Code Samples and Snippet Generation](/openwiki/workflows/code-sample-lifecycle.md): markers, runners, generated snippets, traces, and CI operations.
- [GitHub Actions and CI Automation](/openwiki/integrations/github-actions.md): workflow authority, secrets boundaries, scheduled writers, previews, and publication.
- [Documentation Routes and Language Versioning](/openwiki/concepts/versioning.md): source-family selection, conditionals, link rewriting, and route variants.

---

## File: openwiki/.last-update.json

{
  "updatedAt": "2026-10-30T08:35:20.194Z",
  "command": "update",
  "gitHead": "a3a2ab97fdf881102e44bd96afa5dd7c8bd48c9c",
  "model": "gpt-5.6-terra",
  "status": "complete",
  "language": "en"
}

---

## File: openwiki/.page-manifest.json

{
  "schemaVersion": 1,
  "pages": {
    "/openwiki/architecture/build-system.md": {
      "pageVersion": "sha256:912b98f5dddde2c03e2d73f1ee89d5fdd46a420c8a831c1e9b46a9b06f8f919a",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/architecture/source-map.md": {
      "pageVersion": "sha256:fc9128b0df33f411de3c3bee64469109f6d409ad9ddf1f1b7ff195d349f279d0",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/concepts/preprocessing.md": {
      "pageVersion": "sha256:5be13cf4a483d3dd0cc75c07125e25315f39b070483d15b7770280da146ca6a3",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/concepts/versioning.md": {
      "pageVersion": "sha256:9a378b41514f6fd45cc2fb910508dc72cf396cc8b3021555169a2fed126c76c6",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/integrations/github-actions.md": {
      "pageVersion": "sha256:7a9e15357883db234682bf27f0a18047e457620e7963b73ac31d980b1b21a8b9",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/integrations/mintlify.md": {
      "pageVersion": "sha256:5006ec04f73d6e0f8a174c1e8ad3ce47376c1a540c6c279ca52816c029b2c44c",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/integrations/npm-snippets.md": {
      "pageVersion": "sha256:cc5794f493b9c3657c6cbb7ceba7936b80b45aa904c7adec090cb86d44542a71",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/integrations/reference-docs.md": {
      "pageVersion": "sha256:87b67e5c39e29c1194bbbf57c48983c4189c99c00a7eb80cbe567c8554a50885",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/operations/adding-pages.md": {
      "pageVersion": "sha256:99d16e86386278f4e9821428eaa9e0e69e797fa6fa1f839c76fc82a5aa58b870",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/operations/cli-tools.md": {
      "pageVersion": "sha256:f3d52a29f8af7bdf029b4de65417dbf7145a3073d4c1565a67a60f28fc37d91f",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/operations/cross-references.md": {
      "pageVersion": "sha256:0fe7d49f93e60c183cf365992d04990e2c465538d3dc23093def9df53a2b2630",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/quickstart.md": {
      "pageVersion": "sha256:27d82f0ec18ab02dfb1df495be27851fa653c0db8805fba5f6f723a8df7b6e4a",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/testing/builder-tests.md": {
      "pageVersion": "sha256:075328c59a95482e51e04c1ec01b4ec9c38ea46714fc8fcbc2e5f9e0a582b552",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/testing/conditional-rendering.md": {
      "pageVersion": "sha256:ba6fc49130e066bb8964e51b88e6f6e35de241874a19c2016ce98fdb7ebb1fb6",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/testing/test-overview.md": {
      "pageVersion": "sha256:f21a26488e73136436f9b84a141b0518e6fd6a80b6063eb90182b1d99aaaab2b",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/workflows/local-development.md": {
      "pageVersion": "sha256:7dc05ee57632265a1ff81169e876a5d06c2854e4bf4344b44ba7c3cbf78b3cf6",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    },
    "/openwiki/workflows/versioned-content.md": {
      "pageVersion": "sha256:88b52798ebb5aa9f77c67018f465ee63b3a7bf4b3261005d74ebcb75eb9bfe0b",
      "completedBy": "openwiki/0.5.0",
      "completedRunId": "d6c27dde-b6ee-4fa2-a58e-46062acd3170",
      "gitHead": "68512c2429a64dc27910103f0b656e0b6feafe55",
      "sourceFingerprint": "sha256:0e18d78f74777334899afd9c5b5b69aab7a5b4fcd2a28464368a929e6c7d4e8e"
    }
  }
}

---

## File: openwiki/architecture/build-system.md

---
type: architecture
title: Documentation Build System
tags: [build-system, documentation-pipeline, mintlify, preprocessing, content-routing]
verified:
  - by: openwiki/0.4.3
    at: 2026-10-29T08:15:48.231Z
sources:
  - id: openwiki-source-012f2c78e3b1446dfc35803f
    resource: repo://Makefile
  - id: openwiki-source-41f7c907e42a5efd3b3405cd
    resource: repo://pipeline/commands/build.py
  - id: openwiki-source-b481a230af378c0c50ed9994
    resource: repo://pipeline/commands/dev.py
  - id: openwiki-source-d0cdf44431684bdedf34705a
    resource: repo://pipeline/core/builder.py
  - id: openwiki-source-636af982f42ea94123d2d7e9
    resource: repo://pipeline/core/watcher.py
  - id: openwiki-source-17f3856bce97f37118963062
    resource: repo://pipeline/preprocessors/handle_auto_links.py
  - id: openwiki-source-06a4c757b1153b7de4f47a0e
    resource: repo://pipeline/preprocessors/markdown_preprocessor.py
  - id: openwiki-source-3ae8d89866d72418f1bdab6b
    resource: repo://pipeline/preprocessors/utm_links.py
  - id: openwiki-source-23775c3de52f3ab95a13cb8b
    resource: repo://README.md
  - id: openwiki-source-a9a8730b7e43a5ad2d0af4f1
    resource: repo://src/docs.json
  - id: openwiki-source-24e5f74f0f40e9bfd381871f
    resource: repo://tests/unit_tests/test_builder.py
  - id: openwiki-source-16b92823fdcb07d686f2e27f
    resource: repo://tests/unit_tests/test_watcher.py
generated: { by: "openwiki/0.4.3", at: "2026-10-29T08:15:48.231Z" }
---

# Documentation Build System

`DocumentationBuilder` is the boundary between authored `src/` content and `build/`, the generated tree consumed by Mintlify. `build/` is disposable: a full build deletes it before recreating it. Edit `src/`, not `build/`.

## Entrypoints and full reconstruction

`make build` installs npm dependencies and invokes `uv run pipeline build`. The `docs` console script exposes the same CLI. The build handler verifies that `src/` exists, constructs `DocumentationBuilder(src, build)`, and calls `build_all()`; a missing source returns exit code 1.

```mermaid
flowchart TD
    Source["Authored src tree"] --> Clear["Clear and recreate build"]
    Clear --> Py["Build OSS Python output"]
    Py --> Js["Build OSS JavaScript output"]
    Js --> Unversioned["Build Deep Agents Code OpenWiki and LangSmith"]
    Unversioned --> Managed["Build Managed Deep Agents variants"]
    Managed --> Shared["Copy shared files and render snippets"]
    Shared --> Overlay["Overlay npm components"]
    Overlay --> Mint["Mintlify consumes build"]
    Source --> Watch["Watcher receives file event"]
    Watch --> Incremental["Incremental build_file"]
    Incremental --> Touch["Touch expected output for reload"]
    Touch --> Mint
```

This flowchart distinguishes the authoritative full reconstruction (top path) from the narrower watch path (bottom path).

A full build proceeds in the order shown: two ordinary OSS passes, unversioned Deep Agents Code and OpenWiki, ordinary LangSmith, Managed Deep Agents variants, shared-file copying, and the npm component overlay. The overlay runs last and can replace source-tree copies. The builder does not generate `llms` artifacts.

## Routing is content-aware

The source location selects a routing family, but ordinary shared OSS Markdown is not blindly duplicated. The builder recursively reads `navigation` from `src/docs.json`, collecting routes below `oss/python/` and `oss/javascript/`; the result is cached until the configuration modification time changes. A shared `.md` or `.mdx` page listed only in one language navigation is emitted only for that language. A page listed in both, in neither, or a non-Markdown asset is emitted for both. A navigation entry for `dir` can stand for `dir/index`, unless a language-specific `src/oss/python/dir.mdx` or `src/oss/javascript/dir.mdx` owns that route. If `docs.json` is missing or invalid, the safe fallback is both languages.

| Source family | Output and render target |
| --- | --- |
| Ordinary shared `src/oss/` content | `build/oss/python/...` and/or `build/oss/javascript/...`, selected from navigation; Python and JavaScript rendering respectively. |
| `src/oss/python/` or `src/oss/javascript/` content | Only the matching full-build language pass; the language source segment is removed from the output route. |
| `src/oss/deepagents/code/` | One unprefixed `build/oss/deepagents/code/...` tree, rendered with the Python target. |
| `src/oss/openwiki/` | One unprefixed `build/oss/openwiki/...` tree, rendered with the Python target. |
| Ordinary `src/langsmith/` | One `build/langsmith/...` tree, rendered with the Python target. |
| Direct `src/langsmith/managed-deep-agents*.mdx` | `build/langsmith/python/...` and `build/langsmith/javascript/...`; no unversioned page is emitted. |
| Root and shared inputs | Source-relative output under `build/`, built or copied once. |

Deep Agents Code and OpenWiki are deliberate OSS exceptions: they retain unprefixed routes and their `:::python` branch. Managed Deep Agents is the LangSmith exception. Direct Markdown/MDX files whose names begin `managed-deep-agents` get both language routes; `docs.json` supplies redirects from unversioned Managed Deep Agents URLs to the Python routes. The renderer also changes unprefixed Managed Deep Agents links to the current language route.

For language-targeted output, absolute `/oss/...` links are rewritten as `/oss/python/...` or `/oss/javascript/...`. Already-prefixed links, image paths, and Deep Agents Code and OpenWiki routes are exempt, because those destinations are not language-duplicated.

## Markdown transformation pipeline

Markdown and MDX are transformed only for output. Processing order is: standard preprocessing, language-specific snippet-import rewriting when there is a language target, OSS-link rewriting, Managed Deep Agents-link rewriting, then the contributor footer. `.md` inputs become `.mdx` output.

Standard preprocessing resolves `@[LinkName]` references using scope-specific `SCOPE_LINK_MAPS`, adds UTM parameters to selected LangSmith CTA links, then evaluates conditionals. `:::python` content is retained for Python and removed for JavaScript; `:::js` behaves conversely. Unsupported conditional labels remain intact, and escaped `\:::` is unescaped to literal text. A missing autolink is logged rather than making the build fail. The UTM pass preserves existing query parameters, leaves functional LangSmith paths alone, and skips fenced code.

The output-only contributor footer is omitted for the root `index.mdx` and any path containing `snippets`. Other Markdown includes calls to connect the documentation, edit the source on GitHub, or file an issue.

## Shared files and snippets

`is_shared_file()` identifies `docs.json`; selected root pages; every path under `snippets`, `images`, `.well-known`, or `fonts`; and `.js` and `.css` files. Full builds collect these from the whole source tree once. Supported types include Markdown, JSON and YAML, common image/video formats, CSS/JS, JSX/TSX, text/HTML, and common web fonts. `TEMPLATE.mdx` and unsupported extensions are skipped; `docs.yml` is converted to JSON and other supported non-Markdown files are copied with `copy2`.

Markdown snippets have a special contract. Each is written at its source-relative path with Python-resolved links, and also beneath `build/snippets/python/` and `build/snippets/javascript/` with the corresponding conditions and links. A language-targeted MDX page importing `from '/snippets/foo.mdx'` is rewritten to import the corresponding language-specific Markdown copy. JSX and TSX snippet components remain shared.

Finally, the builder copies `PatternEmbed.jsx` and `ExampleEmbed.jsx` from `node_modules/@langchain/docs-sandbox/dist` into `build/snippets/`, and `ChatLangChainEmbed.js` to the build root. Available package files overwrite copies previously obtained from `src`; missing package directories or mapped files are warnings.

## Development is incremental, not reconstruction

`make dev` installs npm dependencies and starts `pipeline dev`. Unless `--skip-build` is supplied, it performs the full build first, then watches `src/` recursively and runs `mint dev --port 3000` with `build/` as its working directory. It fails if initial construction fails, `mint` cannot be started, the Mint process exits nonzero, or the watcher stops unexpectedly; shutdown stops the watcher and terminates Mint, escalating to kill after five seconds.

The watcher queues supported created and modified files, rejects editor backups and temporary files, debounces events for 0.2 seconds, and builds a batch in worker threads (up to four). Afterwards it touches predicted output files so Mintlify detects the change. Incremental output is intentionally weaker than a full build:

- Deletion removes only the source-relative output path, not every language or special route. A deleted versioned or Managed Deep Agents source can therefore leave generated variants until the next full build.
- `build_file()` does not rerun whole-tree shared-file collection or the npm overlay. Use a full build after cross-file, navigation, package, or deletion changes.
- Managed Deep Agents pages rebuild into both routes, but the watcher treats LangSmith as unversioned for touching and does not touch those routes. Perform a full build if hot reload misses such an edit.

## Validation, safety, and change tests

Validation operates on generated output. `make broken-links` builds first, then runs `mint broken-links --check-redirects` from `build/`, filters known deployment-time OpenAPI and standalone-snippet reports, and fails if remaining broken-link lines exist. `make broken-links-with-anchors` also checks anchors. Deployment-time OpenAPI endpoint pages are intentionally absent from local output. `make export` runs Mint export from `build/` after verifying CLI support and rejecting Node major versions 25 or newer; `make htmltest` unpacks the export and checks external links only.

Whole-tree collection rejects symlinks—even symlinks to regular files—and only accepts regular files resolving beneath the requested source root. This prevents source-tree links from carrying host content into artifacts.

The focused builder tests cover navigation-aware selection, language-routing exceptions, link and snippet rewriting, Managed Deep Agents output, and symlink rejection. Watcher tests cover filtering editor backup and temporary names. When changing routing or generated output, update these observable-output tests and run a full build as well as the focused suite.

## Related pages

- [Preprocessing](/openwiki/concepts/preprocessing.md)
- [Versioning](/openwiki/concepts/versioning.md)
- [Mintlify integration](/openwiki/integrations/mintlify.md)
- [Builder tests](/openwiki/testing/builder-tests.md)
- [Local development](/openwiki/workflows/local-development.md)

---

## File: openwiki/architecture/index.md

# Files

- [Documentation Build System](build-system.md) - How the documentation pipeline reconstructs the Mintlify build tree from src, selects language-aware OSS output, preprocesses Markdown, and supports local development.
- [Repository Source Map](source-map.md) - Maps the durable owners of documentation, navigation, generated source, release automation, and deployment output. Use it to choose the safe change boundary and avoid editing derived artifacts.

---

## File: openwiki/architecture/source-map.md

---
type: architecture reference
title: Repository Source Map
tags: [documentation, build, automation, repository]
verified:
  - by: openwiki/0.4.3
    at: 2026-10-30T08:15:16.596Z
sources:
  - id: openwiki-source-5c124605ed6e394bffee862c
    resource: repo://.github/workflows/_check-links.yml
  - id: openwiki-source-5e9ca8e4c3cab7d91998bc9e
    resource: repo://.github/workflows/changelog-weekly.yml
  - id: openwiki-source-67b847f2c6d57526390e4981
    resource: repo://.github/workflows/check-integration-repos.yml
  - id: openwiki-source-164e2da859b5277df81c7d94
    resource: repo://.github/workflows/ci.yml
  - id: openwiki-source-f2608d0d515da097485b6ec5
    resource: repo://.github/workflows/publish.yml
  - id: openwiki-source-5153f86e64d6ee0b305f72b3
    resource: repo://.github/workflows/refresh-langsmith-openapi.yml
  - id: openwiki-source-4de47c60d7e3210385c34d35
    resource: repo://.github/workflows/update-package-downloads.yml
  - id: openwiki-source-8037e2358a2c4f9b2c722a11
    resource: repo://AGENTS.md
  - id: openwiki-source-12c8fb32a02de9dce773720f
    resource: repo://docs-release-watch/README.md
  - id: openwiki-source-2b522af6f26794f2e71ccb4e
    resource: repo://docs-release-watch/tools/products.py
  - id: openwiki-source-012f2c78e3b1446dfc35803f
    resource: repo://Makefile
  - id: openwiki-source-e52f38a56cc76188818237f7
    resource: repo://packages.yml
  - id: openwiki-source-6e6efa1569f158fcdb678ef0
    resource: repo://pipeline/cli.py
  - id: openwiki-source-b481a230af378c0c50ed9994
    resource: repo://pipeline/commands/dev.py
  - id: openwiki-source-d0cdf44431684bdedf34705a
    resource: repo://pipeline/core/builder.py
  - id: openwiki-source-17f3856bce97f37118963062
    resource: repo://pipeline/preprocessors/handle_auto_links.py
  - id: openwiki-source-dca59d03b9433eea9242c2e4
    resource: repo://pipeline/preprocessors/link_map.py
  - id: openwiki-source-06a4c757b1153b7de4f47a0e
    resource: repo://pipeline/preprocessors/markdown_preprocessor.py
  - id: openwiki-source-0539c4d1a36abb10d1ed2fa9
    resource: repo://pipeline/tools/partner_pkg_table.py
  - id: openwiki-source-05ccef8d4cf1698187f20464
    resource: repo://pyproject.toml
  - id: openwiki-source-23775c3de52f3ab95a13cb8b
    resource: repo://README.md
  - id: openwiki-source-025c5762dd0d95eed99ef36d
    resource: repo://scripts/changelog_pipeline.py
  - id: openwiki-source-bbd7fe20e2563e842ee80a78
    resource: repo://scripts/check_integration_repos.py
  - id: openwiki-source-0d19fa2f26e6485d05a6b929
    resource: repo://scripts/data/integration_external_docs.yaml
  - id: openwiki-source-fd0cb9d6fca56bf4963559e9
    resource: repo://scripts/extract_code_snippets.py
  - id: openwiki-source-560bf24db9566b97ee19e383
    resource: repo://scripts/generate_code_snippet_mdx.py
  - id: openwiki-source-697851c98229599f97376bfb
    resource: repo://scripts/process_langsmith_openapi.py
  - id: openwiki-source-63d8ba810a7c0181c548a307
    resource: repo://scripts/refresh_integration_downloads.py
  - id: openwiki-source-381b2039419503f4809ac2df
    resource: repo://src/code-samples/deepagents/rag-deep.py
  - id: openwiki-source-11d4965febd3986495e06a17
    resource: repo://src/code-samples/langsmith/create-an-agent.py
  - id: openwiki-source-a9a8730b7e43a5ad2d0af4f1
    resource: repo://src/docs.json
  - id: openwiki-source-efb95e7fd1324eefaec0577a
    resource: repo://src/langsmith/create-an-agent.mdx
  - id: openwiki-source-31a97ae83c418d97b331e7df
    resource: repo://src/snippets/code-samples/create-agent-py.mdx
  - id: openwiki-source-3e7f005be053311cf7eb12f1
    resource: repo://src/snippets/code-samples/rag-deep-index-py.mdx
  - id: openwiki-source-24e5f74f0f40e9bfd381871f
    resource: repo://tests/unit_tests/test_builder.py
generated: { by: "openwiki/0.4.3", at: "2026-10-30T08:15:16.596Z" }
---

This repository builds the Mintlify site at `docs.langchain.com`; it does not build the separately generated `reference.langchain.com` site. The primary boundary is durable input versus output: `src/` is authored documentation, `src/docs.json` is the Mintlify site contract, and `build/` is disposable deployment output. Never edit `build/`.

```mermaid
flowchart TD
    Source["Authored source in src"] --> Builder["DocumentationBuilder"]
    Builder --> Output["Disposable build output"]
    Config["src/docs.json"] --> Mintlify["Mintlify deployment"]
    Output --> Mintlify
    Mintlify --> Site["docs.langchain.com"]
    Metadata["Package and integration metadata"] --> Generators["Committed-source generators"]
    Generators --> Source
    Upstream["LangSmith OpenAPI host"] --> Processor["OpenAPI processor"]
    Processor --> Spec["Committed OpenAPI input"]
    Spec --> Mintlify
```

*Authored and generated-but-committed inputs converge during the build; Mintlify then serves the disposable build and generates configured OpenAPI endpoint pages.*

## Ownership boundaries

| Concern | Durable owner | Safe change |
| --- | --- | --- |
| Page prose, frontmatter, assets, UI fragments, and runnable examples | `src/` | Edit source, not `build/`. |
| Navigation, redirects, site settings, and OpenAPI declarations | `src/docs.json` | Update navigation deliberately as well as adding a page. |
| Routes and Markdown transformations | `pipeline/` | Change pipeline code with focused tests. |
| Deployment artifact | `build/` | Regenerate; never patch. |
| Package catalogue | `packages.yml` | Change metadata or its generator, then regenerate outputs. |
| External integration rows | `scripts/data/integration_external_docs.yaml` | Change the record, not a generated table row. |
| LangSmith REST specification | `src/langsmith/langsmith-platform-openapi.json` and its processor | Change policy or refresh the committed input, not deployment-generated endpoint MDX. |
| Cloud and Fleet changelog content | `src/langsmith/changelog.mdx`, `src/snippets/langsmith/fleet-changelog.mdx`, and the encrypted held-state ledger | Use the weekly proposal workflow or make a deliberate source edit; do not expose held state. |
| Release-watch product coverage | `docs-release-watch/tools/products.py`, matching skill, and schedule prompt | Add all three and redeploy the managed agent. |
| Verification and publication | `tests/`, `Makefile`, and `.github/workflows/` | Change the invariant owner alongside its focused checks. |

## Authored documentation, labels, and routes

`src/` is organized for authoring ownership, **not** as a URL or reader-navigation mirror. LangSmith content is in `src/langsmith/`, OSS content is in `src/oss/`, reusable MDX and components are in `src/snippets/`, and `src/code-samples/` holds runnable programs. Reader-facing product and menu labels deliberately cross those directories: the Build menu includes both OSS and LangSmith content, while Test, Deploy, and Monitor draw from LangSmith. Find the owner by directory; find the reader-facing location in `src/docs.json`.

A page emitted by the builder is not automatically discoverable. `src/docs.json` independently owns menus, redirects, and OpenAPI configuration, so adding or moving a page requires an explicit navigation decision and a redirect when retaining a public URL.

`DocumentationBuilder.build_all()` recreates `build/`, builds Python and JavaScript OSS variants, emits Deep Agents Code and OpenWiki once at unversioned OSS routes, builds LangSmith content, then copies shared files including `docs.json`. Regular OSS pages land under `oss/python/` and `oss/javascript/`. `src/oss/openwiki/` and `src/oss/deepagents/code/` intentionally land only at unversioned paths; the Build navigation lists the OpenWiki paths under both language dropdowns. Managed Deep Agents is distinct: matching `src/langsmith/managed-deep-agents*.mdx` files produce Python and JavaScript routes, while configured unversioned legacy URLs redirect to the Python route.

Source collection is containment-safe: the builder skips source-tree symlinks and files whose resolved path leaves the collection root. Preserve that safeguard when changing traversal or adding a collection.

### Markdown, snippets, and cross-references

Before writing MD or MDX, the builder resolves `@[...]` cross-references, adds UTM parameters to eligible LangSmith CTA links, and selects the target `:::python` or `:::js` content while leaving unsupported conditional labels intact. The scoped entries in `pipeline/preprocessors/link_map.py` are the authority for cross-reference symbols. An unresolved symbol is logged and left literal rather than receiving a guessed URL.

Snippets are shared source but have language-aware Markdown copies: the build writes the source-relative copy plus Python and JavaScript copies, and rewrites language-targeted MDX imports to the corresponding copy. JSX and TSX components stay shared.

## API-reference boundaries

Do not conflate three reference surfaces:

- `reference.langchain.com` is generated and deployed outside this repository. This repository only routes issue reports for it.
- `src/docs.json` declares Agent Server, Control Plane, and LangSmith REST OpenAPI sources. Mintlify creates their endpoint pages during deployment; they are neither authored MDX nor builder output.
- `src/langsmith/langsmith-platform-openapi.json` is a generated-but-reviewed committed input. Its processor fetches only an allow-listed LangSmith host, or reads a local input; hides fleet/internal and configured health operations; assigns and orders tag groups; and normalizes visible operation titles before writing the file.

The daily OpenAPI workflow runs that processor, makes no commit when the specification is unchanged, and appends changes to the existing `chore/refresh-langsmith-openapi` pull request. Change the processing policy or upstream contract rather than hand-editing endpoint pages.

## Development, verification, and publication

The `docs` console script exposes the pipeline CLI. `docs dev` builds initially unless `--skip-build` is selected, watches `src/`, and starts `mint dev` in `build/`; an initial build failure prevents server startup. `make build`, `make dev`, and the link-check targets are the standard wrappers.

CI calls reusable test, lint, and link-validation workflows and cancels an older run for the same workflow and ref when a newer push arrives. Separate jobs check merge-conflict markers, cross-references, external integration URL schemes, and generated provider output. The link workflow builds the site, validates links with anchors and redirects, and checks the Agent Server OpenAPI specification. The generated-file check regenerates `src/oss/python/integrations/providers/overview.mdx` and rejects drift except for its stated automation and label bypasses.

Publication is separate from CI: a `main` push runs `make build`, verifies `build/`, places it at `public/build`, and publishes it to the `prod` branch. Reproducibility, rather than edits to output, is therefore the operational requirement.

## Runnable samples and derived snippets

`src/code-samples/` owns executable documentation examples. `make test-code-samples` executes them; `make code-snippets` extracts marked regions to the ignored `src/code-samples-generated/` intermediate and renders committed display MDX under `src/snippets/code-samples/`. Edit and test the program, then regenerate; do not hand-edit either derived layer.

Snippet markers make the source-to-display relationship deterministic. For example, `rag-deep.py` marks `rag-deep-index-py`, whose display fragment is `src/snippets/code-samples/rag-deep-index-py.mdx`. The extractor removes marked non-display regions and errors on an unclosed removal marker; repair markers in the runnable source. The generator supports Python, TypeScript, Java, Kotlin, Go, and shell intermediates.

The agent-registration guide demonstrates the boundary: `create-an-agent.mdx` imports `create-agent-py.mdx`, derived from a marked region in `src/code-samples/langsmith/create-an-agent.py`. That sample points the SDK at a loopback fixture and asserts create and retrieve requests, so running it does not create a live agent.

## Package and integration metadata

`packages.yml` is package metadata for generated integration surfaces. The partner-package generator writes the Python provider overview, and CI rejects manual edits to it. The weekly package-download workflow updates metadata, regenerates the overview plus download and featured snippets, and creates a pull request only when tracked outputs changed.

Integration download tables combine hosted integration-page frontmatter with `scripts/data/integration_external_docs.yaml`. An external entry's validated `docs_url` supplies the name link instead of a hosted guide; CI validates allowed schemes. Use the YAML entry for a third-party row, not a handwritten generated row.

The Monday repository-liveness workflow runs the checker with `--write` and maintains one standing draft PR on `chore/dead-integration-repos`. For a dead third-party GitHub home, the checker can adopt a live third-party replacement evidenced by PyPI, npm, or external documentation. It keeps live GitLab, partner-documentation, and first-party alternatives for human attention; with no live alternate, it delists the package and removes associated listing surfaces.

## Changelog state and release-watch automation

The weekly changelog pipeline owns proposed Cloud and Fleet updates. It collects merged `feat` and `fix` pull requests from `langchain-ai/langchainplus` for a Monday-to-Monday window, classifies customer relevance, and writes only through `weekly --write`. The destination files are `src/langsmith/changelog.mdx` and `src/snippets/langsmith/fleet-changelog.mdx`; flag-gated candidates are retained in `scripts/.changelog_held.json.enc` until rollout checks allow publication. The ledger is encrypted because the public repository must not disclose unreleased work.

`.github/workflows/changelog-weekly.yml` is the operational entrypoint. It runs each Monday at 13:00 UTC or by validated manual date range, and opens or refreshes a review PR rather than publishing directly. A dry run writes candidate entries to the Actions summary; the detailed report stays local because it can name private PRs and unreleased work. Edit wording in the changelog targets during review, not generated build output. See [Weekly Changelog Publication](/openwiki/workflows/changelog-publication.md) for its gates and failure semantics.

`docs-release-watch/` is a separately deployable Managed Deep Agent, not a Mintlify build input. Its registry maps each covered product to an upstream repository, documentation boundary, release-tag filter, source prefixes, language scope, and durable memory file. It currently watches OpenWiki, Deep Agents Python, Deep Agents Code, and Deep Agents JS. For an eligible release published 7–30 days earlier, it compares tagged source with the owned documentation boundary and prepares one Linear DOC ticket and one **draft** documentation PR per feature; people review before merge. To extend coverage, add the registry entry, a matching product skill, and a schedule prompt, then run `uv run mda deploy`. See [Documentation Release Watch](/openwiki/workflows/release-watch.md) for the write safeguards and credentials.

## Change guide

1. **Add or move a page:** edit the owning `src/` MDX, then update `src/docs.json`; do not infer navigation from the directory name.
2. **Change routes, language rendering, snippets, or preprocessing:** modify `pipeline/`, preserve containment safety, add a focused test, and rebuild.
3. **Change a runnable example:** edit and test `src/code-samples/`, run `make code-snippets`, and commit the rendered snippet MDX—not the ignored intermediate.
4. **Change provider or integration listings:** choose `packages.yml`, hosted-page frontmatter, or `integration_external_docs.yaml` by ownership, then regenerate.
5. **Change Mintlify API reference:** change `src/docs.json`, the committed specification, or `process_langsmith_openapi.py`; never author deployment-generated endpoint MDX.
6. **Fix an API symbol link:** amend the scoped mapping in `pipeline/preprocessors/link_map.py` and verify preprocessing rather than pasting a guessed URL into output.
7. **Change a changelog proposal:** preserve encrypted held-state handling and review-PR publication; use `weekly --write` only when the required secrets and rollout checks are available.
8. **Extend release watch:** align the product registry, skill, schedule, and deployment. Do not treat its generated draft PR as an automatically publishable documentation change.
9. **Change verification or scheduled maintenance:** update the workflow, script, and tests together; preserve the standing-PR behavior of OpenAPI and integration-repository maintenance.

## Related pages

- [Build system](/openwiki/architecture/build-system.md)
- [Versioning](/openwiki/concepts/versioning.md)
- [Mintlify integration](/openwiki/integrations/mintlify.md)
- [Adding pages](/openwiki/operations/adding-pages.md)
- [Weekly Changelog Publication](/openwiki/workflows/changelog-publication.md)
- [Documentation Release Watch](/openwiki/workflows/release-watch.md)

---

## File: openwiki/concepts/index.md

# Files

- [Markdown Preprocessing](preprocessing.md) - Build-time Markdown and MDX transformations for scoped API references, CTA attribution, language branches, and route-aware output. Documents fence and escape invariants plus strict source cross-reference validation.
- [Documentation Routes and Language Versioning](versioning.md) - Explains how source families and docs.json navigation determine generated documentation routes, language variants, conditional content, and compatibility redirects. Covers unversioned product exceptions and safe verification of route changes.

---

## File: openwiki/concepts/preprocessing.md

---
type: documentation pipeline
title: Markdown Preprocessing
tags: [build, markdown, preprocessing, cross-references, language-versioning, api-reference]
sources:
  - id: openwiki-source-012f2c78e3b1446dfc35803f
    resource: repo://Makefile
  - id: openwiki-source-d0cdf44431684bdedf34705a
    resource: repo://pipeline/core/builder.py
  - id: openwiki-source-17f3856bce97f37118963062
    resource: repo://pipeline/preprocessors/handle_auto_links.py
  - id: openwiki-source-dca59d03b9433eea9242c2e4
    resource: repo://pipeline/preprocessors/link_map.py
  - id: openwiki-source-06a4c757b1153b7de4f47a0e
    resource: repo://pipeline/preprocessors/markdown_preprocessor.py
  - id: openwiki-source-3ae8d89866d72418f1bdab6b
    resource: repo://pipeline/preprocessors/utm_links.py
  - id: openwiki-source-0a0a6c8d7a88288e6b6b9b5b
    resource: repo://scripts/check_cross_refs.py
  - id: openwiki-source-24e5f74f0f40e9bfd381871f
    resource: repo://tests/unit_tests/test_builder.py
  - id: openwiki-source-c2764a7369c8fbf3e49da6f8
    resource: repo://tests/unit_tests/test_check_cross_refs.py
  - id: openwiki-source-2ecfcd33b729fccd843ab705
    resource: repo://tests/unit_tests/test_handle_auto_links.py
  - id: openwiki-source-5255204fc494ae04cd6ba685
    resource: repo://tests/unit_tests/test_utm_links.py
generated: { by: "openwiki/0.4.3", at: "2026-10-29T08:15:48.231Z" }
verified:
  - by: openwiki/0.4.3
    at: 2026-10-29T08:15:48.231Z
---

# Markdown Preprocessing

`DocumentationBuilder` transforms source Markdown and MDX while writing build artifacts; it does not edit source files under `src/`. The pipeline lets one shared page produce Python and JavaScript variants without authors manually qualifying every API reference, route, snippet import, or CTA.

For a regular Markdown file, `preprocess_markdown()` resolves scoped cross-references, decorates eligible LangSmith CTA links, and renders conditional language blocks. The builder then scopes snippet imports, rewrites routes, appends an eligible source footer, and writes the artifact.

```mermaid
flowchart TD
    Source["Markdown or MDX source"] --> Select["Select build target"]
    Select --> Python["Python target"]
    Select --> JavaScript["JavaScript target"]
    Python --> References["Resolve scoped references"]
    JavaScript --> References
    References --> Cta["Decorate LangSmith CTA links"]
    Cta --> Conditional["Render conditional blocks"]
    Conditional --> Snippets["Scope snippet imports"]
    Snippets --> Oss["Rewrite OSS routes"]
    Oss --> Managed["Rewrite Managed Deep Agents routes"]
    Managed --> Footer["Append eligible footer"]
    Footer --> Output["Regular page artifact"]
    Source --> SnippetSource["Shared Markdown snippet"]
    SnippetSource --> SnippetPython["Python snippet copy"]
    SnippetSource --> SnippetJavaScript["JavaScript snippet copy"]
    SnippetPython --> SnippetProcess["Preprocess and rewrite routes"]
    SnippetJavaScript --> SnippetProcess
    SnippetProcess --> SnippetOutput["Language-prefixed snippet artifacts"]
```

The diagram shows the ordered regular-page sequence and the separate Python and JavaScript branches used for shared snippets.

## Entry points and language selection

`_process_markdown_file()` reads a `.md` or `.mdx` input, delegates content work to `_process_markdown_content()`, appends the footer, converts `.md` output to `.mdx`, and writes the result. `_process_markdown_content()` calls `preprocess_markdown()`, scopes Markdown snippet imports when a target is supplied, then rewrites OSS and Managed Deep Agents routes.

The preprocessing target keys are `python` and `js`; `DocumentationBuilder.language_url_names` turns them into the route segments `python` and `javascript`. If `preprocess_markdown()` receives no target, it uses `TARGET_LANGUAGE`, defaulting to `python`; its `default_scope` likewise defaults to that target. Conditional rendering rejects any other target with `ValueError`.

Build routing selects those targets deliberately:

- A shared `oss/` Markdown page is emitted for both Python and JavaScript unless `docs.json` navigation lists its route in exactly one language; in that case it is emitted only for that language. Files already below `oss/python/` or `oss/javascript/` are selected only for their matching build.
- `oss/deepagents/code` and `oss/openwiki` are emitted once with Python selection and retain language-agnostic routes.
- Ordinary LangSmith Markdown is built once with Python selection, while Managed Deep Agents pages emit Python and JavaScript routes.
- Each Markdown snippet is emitted below `build/snippets/python/` and `build/snippets/javascript/`, plus a Python-default base copy for unversioned consumers.

For the wider route model, see [Language Versioning Strategy](/openwiki/concepts/versioning.md) and [Build System Architecture](/openwiki/architecture/build-system.md).

## Source-level transformations

### 1. Scoped cross-references

Authors can write `@[link_name]`, `@[title][link_name]`, and `@[`link_name`]`. `replace_autolinks()` looks up the key in `SCOPE_LINK_MAPS` and produces a Markdown link; a custom title is retained, and the simple backticked form retains backticks in its generated link text. Prefix a reference with `\` to show it literally: it is not resolved, and the final pass removes the escape.

Resolution starts in `default_scope`. A `:::python` or `:::js` line changes the active scope; a bare closing `:::` resets it to the default scope. Regular backtick and tilde code fences prevent both reference replacement and scope changes within their content. An unclosed regular fence protects the remaining input from reference replacement.

Fence protection is deliberately lightweight: both the autolink and CTA passes maintain one Boolean that toggles on every line beginning with at least three backticks or tildes. They do not pair an opening delimiter with a matching delimiter. Keep well-formed, balanced fences in authored input; malformed or mixed fence markers can change which later lines the source-level passes treat as code.

`SCOPE_LINK_MAPS` is assembled by scope from host-and-scope `LINK_MAPS` entries: relative targets are joined to the entry host, while absolute targets remain absolute. The maps deliberately allow one key to resolve differently in Python and JavaScript and include compatibility aliases where shared prose needs the other language's API spelling.

The MCP entries illustrate this distinction. Python mappings include `MCPAdapter`, tool conversion, `MultiServerMCPClient`, MCP loading, interceptor, callback, and connection/session references. JavaScript maps `MCPAdapter` and `MCPAdapter.listTools` to its JavaScript reference surface. Use the spelling appropriate to the fenced language; do not assume that a Python-specific key is available in the JS map.

A missing key is deliberately non-fatal **during a build**: preprocessing logs it at info level with file, line, key, and scope, then leaves the authored marker literal. The special runtime `global` scope logs an error and falls back to Python. Add or correct mappings in `pipeline/preprocessors/link_map.py`, then run the strict source-validation gate described below. See [Cross-Reference Links](/openwiki/operations/cross-references.md).

### 2. LangSmith CTA attribution

`add_utm_to_cta_links()` recognizes only Markdown-link URLs beginning `https://smith.langchain.com` whose parsed path is empty, `/`, `/agents`, or `/agents/`. It adds `utm_source=docs`, `utm_medium=cta`, `utm_campaign=langsmith-signup`, and `utm_content`, which is derived from the file path after `src/`; for example, `src/langsmith/home.mdx` produces `langsmith-home`. Existing query parameters and an optional Markdown link title are preserved.

Functional routes such as settings, hub, projects, public traces, and Studio are not decorated. Links on another host, including `api.smith.langchain.com`, are also unchanged. Backtick and tilde fenced code is skipped.

### 3. Conditional language blocks

`:::python ... :::` and `:::js ... :::` are processed after references and CTA decoration. The selected block emits its content without fences and the other supported block is removed. Unsupported language identifiers are left intact; unclosed blocks do not match and remain intact. Escaped `\:::` markers are unescaped, allowing literal conditional syntax in output.

The implementation is a whole-input regular-expression transformation, rather than a nested-block parser: the first eligible closing marker at the opening indentation ends the match. Unlike the two earlier transformations, it is not code-fence-aware. Escape literal `:::` syntax in examples that must not be rendered. See [Conditional Rendering Tests](/openwiki/testing/conditional-rendering.md).

## Validation and fence boundaries

`make check-cross-refs` is the strict authoring gate for missing mappings; it is intentionally different from the non-fatal behavior of build-time preprocessing. The command runs `scripts/check_cross_refs.py` on Markdown and MDX under `src/`, reusing the cross-reference and fence patterns. It skips regular code fences, escaped references, `snippets/code-samples/`, and paths containing `node_modules`; files that cannot be decoded as UTF-8 are skipped with a warning.

The validator checks every shared, unfenced `oss/` reference against **both** Python and JS maps, independent of navigation-based build selection. `oss/python/` and `oss/javascript/` instead use one scope, as do language fences. It requires resolution in **all** applicable scopes, so a Python-only reference in shared unfenced OSS content fails rather than silently producing a literal reference in a JavaScript variant. Any unresolved reference makes the command exit with status 1.

## Output-time rewrites

After source preprocessing, the regular-file path applies these transformations in order:

1. **Snippet import scoping.** An MDX import from `/snippets/...md` or `.mdx` becomes `/snippets/{python|javascript}/...` for a language build. Imports already prefixed with `python/` or `javascript/` remain unchanged. The rewrite targets Markdown snippet imports, whose language-specific copies contain absolute OSS links for consumers at arbitrary nesting depth.
2. **OSS route rewriting.** Markdown URLs and HTML `href` values beginning `/oss/` receive the selected language segment. Paths already prefixed with a language, paths containing `images`, and the language-agnostic `/oss/deepagents/code` and `/oss/openwiki` paths remain unchanged.
3. **Managed Deep Agents routes.** Bare Markdown or HTML `/langsmith/managed-deep-agents...` URLs become `/langsmith/{language}/managed-deep-agents...`. Already language-qualified URLs do not match the bare-route pattern.
4. **Source footer.** `_add_suggested_edits_link()` appends a Mintlify callout with a documentation/MCP connection link and GitHub edit and issue links only for files below `src/`. It excludes the root `index.mdx` and a path with a `snippets` segment.

Snippet Markdown is processed separately for each language, with preprocessing plus OSS and Managed Deep Agents rewriting, then written below `build/snippets/{python|javascript}/`. A Python-default base copy is also written for unversioned imports. This path does not add the source footer.

## Failure behavior and safe changes

- Missing references are non-fatal during preprocessing, but should fail `make check-cross-refs` before merge.
- Invalid conditional targets, and exceptions from regular content or file processing, are logged and re-raised, stopping that build path.
- Source-footer generation is best-effort: an internal failure is logged and the original content is returned.
- The builder rejects symlinks and paths resolving outside a scanned source root, so a documentation build cannot follow a committed link to host content.

When extending this pipeline, preserve the order. Scope-sensitive references must resolve while conditional fences still exist. Keep the rewrite exclusion guards: removing them can double-prefix routes or break the deliberately language-agnostic products. New reusable Markdown snippets must continue to receive language-specific copies because importing pages can be deeply nested. When adding a shared reference, ensure that its key exists in both maps or fence it to the language that owns it.

## Focused regression coverage

`tests/unit_tests/test_handle_auto_links.py` covers replacement outside regular fences, preservation inside backtick, tilde, extended, indented, and unclosed fences, conditional-looking lines inside code, and escaping. `tests/unit_tests/test_utm_links.py` covers the CTA allowlist, path-derived attribution, preservation of query strings and titles, functional/API-domain exclusions, and fence skipping.

`tests/unit_tests/test_check_cross_refs.py` covers scope-aware validation, the both-scope requirement for shared OSS content, titled and backticked references, and exclusions. Builder tests cover language route insertion and exemptions, scoped snippet copies, and Managed Deep Agents variants. See [Test Overview](/openwiki/testing/test-overview.md) for the wider suite.