# developing-langgraph-js-agents
> Build, audit, review, and update LangGraph.js agents. Use PROACTIVELY when working with LangGraph, @langchain/langgraph, agent graphs, state machines, or AI workflows in TypeScript/JavaScript. Covers creating new agents, adding features, debugging, testing, and optimizing. (user)
- Author: Mike Kelly
- Repository: mikekelly/developing-langgraph-js-agents
- Version: 20251231171753
- Stars: 0
- Forks: 0
- Last Updated: 2026-02-06
- Source: https://github.com/mikekelly/developing-langgraph-js-agents
- Web: https://mule.run/skillshub/@@mikekelly/developing-langgraph-js-agents~developing-langgraph-js-agents:20251231171753
---
---
name: developing-langgraph-js-agents
description: "Build, audit, review, and update LangGraph.js agents. Use PROACTIVELY when working with LangGraph, @langchain/langgraph, agent graphs, state machines, or AI workflows in TypeScript/JavaScript. Covers creating new agents, adding features, debugging, testing, and optimizing. (user)"
---
## How LangGraph.js Agents Work
LangGraph decomposes agents into **discrete nodes** (functions) connected through **shared state**. Execution flows through a graph where nodes do work and edges determine what runs next.
### 1. State-First Design
State is the shared memory accessible to all nodes. Design state before nodes:
```typescript
import { Annotation, MessagesAnnotation } from "@langchain/langgraph";
const AgentState = Annotation.Root({
...MessagesAnnotation.spec,
// Add custom fields with reducers
context: Annotation({
reducer: (x, y) => x.concat(y),
default: () => [],
}),
});
```
**Critical rules:**
- Store raw data, not formatted text (format in nodes)
- Use reducers for fields that accumulate (messages, lists)
- Keep state minimal - only persist what's needed across steps
### 2. Nodes Do Work, Edges Route
```typescript
// Node: receives state, returns partial update
async function callModel(state: typeof AgentState.State) {
const response = await model.invoke(state.messages);
return { messages: [response] };
}
// Edge: determines next node
function shouldContinue(state: typeof AgentState.State) {
const lastMessage = state.messages.at(-1);
if (lastMessage?.tool_calls?.length) return "tools";
return END;
}
```
### 3. Always Compile Before Use
```typescript
const graph = new StateGraph(AgentState)
.addNode("agent", callModel)
.addNode("tools", toolNode)
.addEdge(START, "agent")
.addConditionalEdges("agent", shouldContinue)
.addEdge("tools", "agent")
.compile(); // Required!
```
### 4. Checkpointers Enable Persistence
For conversation memory, human-in-the-loop, or fault tolerance:
```typescript
import { MemorySaver } from "@langchain/langgraph";
const graph = workflow.compile({
checkpointer: new MemorySaver()
});
// Invoke with thread_id
await graph.invoke(input, {
configurable: { thread_id: "user-123" }
});
```
What would you like to do?
1. Build a new agent from scratch
2. Add a feature to an existing agent
3. Audit/review an agent's architecture
4. Debug an agent issue
5. Write tests for an agent
6. Optimize agent performance
7. Something else
**Wait for response, then read the matching workflow from `workflows/` and follow it.**
| Response | Workflow |
|----------|----------|
| 1, "new", "create", "build", "start", "scaffold" | `workflows/build-new-agent.md` |
| 2, "add", "feature", "implement", "extend" | `workflows/add-feature.md` |
| 3, "audit", "review", "check", "assess", "evaluate" | `workflows/audit-agent.md` |
| 4, "debug", "fix", "broken", "error", "bug", "issue" | `workflows/debug-agent.md` |
| 5, "test", "tests", "testing", "coverage" | `workflows/write-tests.md` |
| 6, "optimize", "performance", "slow", "fast", "improve" | `workflows/optimize-agent.md` |
| 7, other | Clarify intent, then select appropriate workflow |
## After Every Change
```bash
# 1. TypeScript compiles?
npx tsc --noEmit
# 2. Tests pass?
npm test
# 3. Agent runs?
npx ts-node src/agent.ts
```
Report:
- "Build: ✓" or "Build: ✗ [error]"
- "Tests: X pass, Y fail"
- "Agent executed successfully" or "Runtime error: [details]"
## Domain Knowledge
All in `references/`:
**LangChain Fundamentals:**
- langchain-fundamentals.md - Messages, chat models, structured output, retrieval, guardrails
**Architecture:**
- graph-api.md - StateGraph, nodes, edges, compilation
- functional-api.md - Tasks, entrypoints, when to use
- state-management.md - Annotations, reducers, state design
**Features:**
- tools.md - Creating and binding tools
- persistence.md - Checkpointers, memory, threads
- streaming.md - Real-time output modes
- interrupts.md - Human-in-the-loop patterns
- subgraphs.md - Composing multi-agent systems
- agent-chat-ui.md - Chat UI setup and integration
- agent-inbox.md - Inbox UI for interrupt management, ambient agents
- deployment.md - Local server, LangSmith Cloud, Studio, observability, time-travel
**Patterns:**
- common-patterns.md - ReAct, RAG, routing patterns
- multi-agent.md - Supervisor, hierarchical, network architectures
- agent-skills.md - Modular capabilities and skill loading
- anti-patterns.md - Common mistakes to avoid
## Workflows
All in `workflows/`:
| File | Purpose |
|------|---------|
| build-new-agent.md | Create a new LangGraph.js agent from scratch |
| add-feature.md | Add capabilities to an existing agent |
| audit-agent.md | Review architecture and identify issues |
| debug-agent.md | Find and fix agent bugs |
| write-tests.md | Test nodes, graphs, and integrations |
| optimize-agent.md | Improve performance and reduce latency |
## Templates
All in `templates/`:
| File | Purpose |
|------|---------|
| basic-agent.ts | Minimal ReAct agent scaffold |
| rag-agent.ts | Retrieval-augmented agent |
| multi-agent.ts | Multi-agent system with subgraphs |
## Official Documentation
For topics not fully covered here, consult:
- **LangGraph.js Docs**: https://docs.langchain.com/oss/javascript/langgraph/overview.md
- **API Reference**: https://langchain-ai.github.io/langgraphjs/reference/
- **GitHub Examples**: https://github.com/langchain-ai/langgraphjs/tree/main/examples
- **LangChain Tools**: https://docs.langchain.com/oss/javascript/langchain/tools.md