langgraph — правило для Cursor: как строить графы агентов
Правило для Cursor с практиками LangGraph: как раскладывать узлы, состояния и подграфы в Python-проекте.
.cursor/rules/langgraph.mdcЧто делает langgraph
Правило подключается к файлам **/*.py и задаёт стиль работы с LangGraph. Основная мысль — у каждого узла одна задача, а повторяющиеся куски выносятся в подграфы. Для графов советуется держаться направленного ациклического вида, а циклы оставлять только там, где без обратной связи не обойтись.
Внутри есть примеры кода: StateGraph, TypedDict для состояния, функции-узлы, которые возвращают обновлённое состояние, сборка подграфа через add_node, add_edge, set_entry_point и set_finish_point. Это не библиотека и не плагин — файл правил, который Cursor подхватывает как контекст. Поэтому установка сводится к тому, что вы кладёте langgraph.mdc в .cursor/rules/.
Правило привязано к Python, так что в проекте на TypeScript оно не сработает. И держите в голове: это набор рекомендаций, а не проверка типов — Cursor просто подсказывает модели, как писать, и ничто не мешает ей отойти от шаблона.
Какие задачи решает
- разложить логику агента по узлам с одной задачей
- вынести повторяющиеся шаги в переиспользуемый подграф
- описать состояние агента через
TypedDict - собрать граф с точкой входа и точкой завершения
- решить, где цикл в графе оправдан, а где нет
Примеры запросов агенту
- собери граф LangGraph для обработки запроса: узел загрузки данных, узел анализа, между ними ребро
- вынеси подготовку контекста в отдельный подграф и подключи его к основному графу
- опиши состояние агента через TypedDict и добавь узел, который дописывает сообщения
Как установить langgraph
Вручную: положить файлы
.cursor/rules/langgraph.mdcВо frontmatter: description, globs, alwaysApply
Вручную: положить файлы
.claude/rules/langgraph.mdПоле paths во frontmatter ограничивает файлы: globs из источника → paths
AGENTS.md
Codex читает AGENTS.md: вставьте текст правила туда
Вручную: положить файлы
.github/instructions/langgraph.instructions.mdПоле applyTo задаёт, к каким файлам применять: globs из источника → applyTo
Вручную: положить файлы
.devin/rules/langgraph.mdВручную: положить файлы
.clinerules/langgraph.mdПо шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules
Из того же набора69
Похожие
Рядом в теме «Настройка агента: память, контекст, субагенты»
Все правила IDE по теме «Настройка агента: память, контекст, субагенты» →Вопросы о langgraph
Как установить langgraph в Cursor?
Создайте файл .cursor/rules/langgraph.mdc в корне проекта и вставьте в него содержимое правила. Cursor подхватит его автоматически для файлов по маске **/*.py.
Что делает это правило?
Задаёт практики построения графов агентов на LangGraph: одна ответственность на узел, подграфы для повторяющихся паттернов, предпочтение ациклических графов. Внутри есть примеры на Python с StateGraph.
Для каких файлов работает правило?
Маска **/*.py, то есть Python-файлы проекта. В проектах на других языках оно не применяется.
Исходный текст
langgraph.mdc · CC0-1.0
---
description: This guide provides definitive best practices for building robust, maintainable, and performant AI agent workflows using LangGraph.
globs: **/*.py
---
# langgraph Best Practices
## Code Organization and Structure
### 1. Explicit Graph Topology & Modularity
Define clear, single responsibilities for each node. Encapsulate common patterns into reusable subgraphs. Prefer Directed Acyclic Graphs (DAGs); use cycles only when essential for feedback loops.
✅ GOOD: Focused nodes, composable subgraphs
```python
from langgraph.graph import StateGraph, END
from typing import TypedDict, List
class AgentState(TypedDict):
messages: List[str]
tool_output: str | None
def fetch_data_node(state: AgentState) -> AgentState:
return {"messages": state["messages"] + ["Data fetched."]}
def analyze_data_node(state: AgentState) -> AgentState:
return {"messages": state["messages"] + ["Data analyzed."]}
def build_subgraph():
builder = StateGraph(AgentState)
builder.add_node("fetch", fetch_data_node)
builder.add_node("analyze", analyze_data_node)
builder.add_edge("fetch", "analyze")
builder.set_entry_point("fetch")
builder.set_finish_point("analyze")
return builder.compile()
```
### 2. Functional API Preference
Prior
© sanjeed5 · CC0-1.0 · sanjeed5/awesome-cursor-rules-mdc