随着 agents 承担更复杂的 tasks,它们需要的 context 也会增长。将所有 instructions 加载到 system prompt 会把 tokens 浪费在与当前 task 无关的信息上,而跨 sessions 手动提供相同 guidance 也无法扩展。 Skills 通过将 domain expertise(例如 workflows、best practices、scripts、reference docs 和 templates)打包到 reusable directories 来解决此问题。Agent 在 startup 时获得 contents summary,并且只在相关时 discover 和 read 其中包含的 files。
Skills 需要 deepagents>=1.7.0
Deep agent skills 遵循 Agent Skills specification
有关可提升 agent 在 LangChain ecosystem tasks 上表现的 ready-to-use skills,请参阅 LangChain Skills repository。

What are skills

每个 skill 都是一个包含 SKILL.md file 的 directory:一个带 YAML frontmatter(namedescription)的 markdown file,后面是 agent 在 skill activated 时遵循的 instructions。Skill directory 还可以包含 supporting files,例如 scripts、reference docs 和 templates。
skills/
└── langgraph-docs/
    └── SKILL.md
SKILL.md 以 YAML frontmatter 开头,后面是 markdown instructions:
---
name: langgraph-docs
description: Use this skill for requests related to LangGraph in order to fetch relevant documentation to provide accurate, up-to-date guidance.
---

# langgraph-docs

## Overview

This skill explains how to access LangGraph documentation to help answer questions and guide implementation.

## Instructions

### 1. Fetch the documentation index

Use the fetch_url tool to read the following URL:
https://docs.langchain.com/llms.txt

This provides a structured list of all available documentation with descriptions.

### 2. Select relevant documentation

Based on the question, identify 2-4 most relevant documentation URLs from the index. Prioritize:

- Specific how-to guides for implementation questions
- Core concept pages for understanding questions
- Tutorials for end-to-end examples
- Reference docs for API details

### 3. Fetch and synthesize

Use the fetch_url tool to read the selected documentation URLs, then answer the user's question. Give a direct answer first, include the minimum necessary context, and link to the source pages rather than quoting long passages.
SKILL.md 中 reference 任何 supporting files,并说明每个 file 包含什么以及何时使用。Agent 会通过 skill instructions 中的 references 发现这些 files。
Skills 使用 progressive disclosure:agent 分层加载 skill information,只在 task 需要时拉取更多 detail。 在 Deep Agents 中,SkillsMiddleware 分三个 stages 处理此流程:
  1. Discovery:Agent start 时,middleware 扫描 configured skill paths,解析每个 SKILL.md frontmatter,并将 skill names 和 descriptions 注入 system prompt。
  2. Read:当 agent 判断某个 skill 匹配当前 task 时,它会通过 read_file 读取完整 SKILL.md content。没有专门的 activation mechanism。
  3. Execute:Agent 遵循 skill 的 instructions,并按需读取 supporting files(scripts、references、assets)。
Agent Skills specification 建议保持 frontmatter 简洁,并将 SKILL.md body 控制在 5,000 tokens 以下。遵循这些 guidelines 很重要,因为每个 skill 的 frontmatter 都会在 discovery 时添加到 system prompt,而 full body 只在 activated 时读取。保持两层都较小,意味着可以加载许多 skills 而不会挤占 context window。
SKILL.md frontmatter 中编写清晰、具体的 descriptions。Agent 只根据 description 决定是否 activate skill。包含 specific keywords 和 use cases,让 agent 能准确匹配。

Usage

创建 top level skills directory。然后在其中创建一个 directory,并为第一个 skill 添加 SKILL.md file。最后,在创建 agent 时传入 top level skills directory 的 path:
import { createDeepAgent, FilesystemBackend } from "deepagents";

const backend = new FilesystemBackend({ rootDir: process.cwd() });

const agent = await createDeepAgent({
  model: "anthropic:claude-sonnet-4-6",
  backend,
  skills: ["/skills/"],
});

const result = await agent.invoke(
  { messages: [{ role: "user", content: "What is LangGraph?" }] },
  { configurable: { thread_id: "1" } },
);
此 example 使用 FilesystemBackend 从 disk 加载 skills。有关其他 storage options,包括从 remote sources 加载 skills,请参阅 Backends and remote skill loading
skills
list[str]
Skill source paths list。Paths 必须使用 forward slashes 指定,并且相对于 backend 的 root。
  • 如果省略,则不加载 skills。
  • 使用 StateBackend(default)时,请通过 invoke(files={...}) 提供 skill files。使用 deepagents.backends.utils 中的 create_file_data() 格式化 file contents;不支持 raw strings。
  • 使用 FilesystemBackend 时,skills 会从相对于 backend root_dir 的 disk 加载。
对于同名 skills,后面的 sources 会覆盖前面的 sources(last one wins)。
当多个 skill sources 包含同名 skill 时,skills array 中靠后 source 的 skill 优先(last one wins)。这让你可以叠加来自不同 origins 的 skills,例如用 project-specific versions 覆盖 base skills。

Write effective skills

The Agent Skills specification includes guidance on structuring skills for reliable discovery and activation. The following recommendations build on that foundation with practical patterns for Deep Agents. 编写具体 descriptions。discovery 期间,description field 是 agent 对每个 skill 唯一能看到的信息。好的 description 会告诉 agent skill 做什么以及何时 activate,并包含 agent 可匹配的 specific keywords:
# Good: specific about what and when
description: >-
  Extract text and tables from PDF files, fill PDF forms, and merge
  multiple PDFs. Use when working with PDF documents or when the user
  mentions PDFs, forms, or document extraction.

# Poor: too vague for reliable matching
description: Helps with PDFs.
当你在相关 domains 中有多个 skills 时,请清晰区分它们的 descriptions。Overlapping descriptions 会导致 agent activate 错误 skill,或在选项之间犹豫。如果两个 skills 用途相似,请 consolidate them into one。 保持 instructions 聚焦。 Agent Skills specification 建议将 SKILL.md 控制在 500 lines 以下。当 instructions 变长时,请将 detailed reference material 移到 separate files,并从 main SKILL.md reference 它们:
skills/
└── data-pipeline/
    ├── SKILL.md
    └── references/
        ├── schema-reference.md
        └── error-codes.md
Agent 只在 instructions 需要时加载 reference files,从而保持 progressive disclosure 每一层大小适当。让 file references 距离 SKILL.md 保持一层深度,并避免 deeply nested reference chains,因为这会迫使 agent 多次读取才能到达所需信息。 为 agent 结构化 instructions。SKILL.md body 写成 agent 可遵循的清晰 instructions:
  • 面向 multi-step workflows 的 step-by-step procedures
  • 用于选择 approaches 的 decision criteria
  • Expected inputs and outputs examples,让 agent 知道成功是什么样
  • Agent 应 handle 或 flag to the user 的 edge cases
管理 skill count。 少量 well-scoped skills 的效果好于许多 overlapping skills。随着具有相似 descriptions 的 skills 数量增加,agent 选择正确 skill 的能力会下降。如果你有许多 related skills,请考虑:
  • 将 related capabilities 合并为一个 skill,并为每个 sub-task 设置 sections
  • 使用 reference files 让 main SKILL.md 保持简洁,同时覆盖多个 sub-tasks
使用 skills-ref validation tool 检查你的 SKILL.md frontmatter 是否遵循 Agent Skills specification 的 naming 和 format conventions。

Backends and remote skill loading

Deep Agents 根据你希望如何 store 和 manage skill files,支持不同 backends:
  • StateBackend:将 files 存储在 current thread 的 LangGraph agent state 中。
  • StoreBackend:将 files 存储在 LangGraph store 中,用于 durable、cross-thread storage。
  • FilesystemBackend:从 configurable root_dir 下的 disk 读写 skill files。
import { createCodeInterpreterMiddleware } from "@langchain/quickjs";
import { createDeepAgent, StateBackend, type FileData } from "deepagents";
import { MemorySaver } from "@langchain/langgraph";

const checkpointer = new MemorySaver();
const backend = new StateBackend();

function createFileData(content: string): FileData {
  const now = new Date().toISOString();
  return {
    content: content.split("\n"),
    created_at: now,
    modified_at: now,
  };
}

const skillsFiles: Record<string, FileData> = {};
const skillUrl =
  "https://raw.githubusercontent.com/langchain-ai/deepagentsjs/refs/heads/main/examples/skills/langgraph-docs/SKILL.md";
const response = await fetch(skillUrl);
const skillContent = await response.text();

skillsFiles["/skills/langgraph-docs/SKILL.md"] = createFileData(skillContent);

const agent = await createDeepAgent({
  model: "google-genai:gemini-3.1-pro-preview",
  backend,
  checkpointer, // Required !
  // IMPORTANT: deepagents skill source paths are virtual (POSIX) paths relative to the backend root.
  skills: ["/skills/"],
  middleware: [createCodeInterpreterMiddleware({ skillsBackend: backend })],
});

const config = { configurable: { thread_id: `thread-${Date.now()}` } };
const result = await agent.invoke(
  {
    messages: [{ role: "user", content: "what is langraph?" }],
    files: skillsFiles,
  },
  config,
);

Load skills at runtime

当你有大量 skills,但某次 run 只需要其中一个 subset 时,请根据 runtime context(例如 user role、tenant 或 request type)选择要加载的 skills。主要有两种 approaches:

Dynamic skill lists

最简单的方法是在创建 agent 前构造 skills array。根据你拥有的 runtime context 选择要包含的 skill paths:
import { createDeepAgent } from "deepagents";

const SKILLS_BY_ROLE: Record<string, string[]> = {
  engineering: ["/skills/code-review/", "/skills/testing/", "/skills/deployment/"],
  data: ["/skills/sql-analysis/", "/skills/visualization/", "/skills/data-pipeline/"],
  support: ["/skills/ticket-triage/", "/skills/runbook/"],
};

function createAgentForUser(userRole: string) {
  return createDeepAgent({
    model: "anthropic:claude-sonnet-4-6",
    skills: SKILLS_BY_ROLE[userRole] ?? [],
  });
}
当 skills 位于 disk 或 shared backend 中,并且你只需要控制 agent 看到哪些 skills 时,此方法很有效。Skills 本身不会 duplicate,你维护一份 copy,并改变传给每次 run 的 paths。

Namespaced skills

对于每个 user 的 skill set 都独立管理的 multi-tenant applications,请使用 namespace factory 将 /skills/ route 到 StoreBackend。只用该 user 应有 access 的 skills 填充每个 namespace,middleware 会在 runtime resolve 到正确集合:
import {
  createDeepAgent,
  CompositeBackend,
  StateBackend,
  StoreBackend,
} from "deepagents";

const agent = await createDeepAgent({
  model: "anthropic:claude-sonnet-4-6",
  skills: ["/skills/"],
  backend: new CompositeBackend({
    default: new StateBackend(),
    routes: {
      "/skills/": new StoreBackend({
        namespace: (ctx) => [
          ctx.assistantId ?? "default",
          ctx.config?.configurable?.user_id ?? "anonymous",
        ],
      }),
    },
  }),
});
当不同 users 或 tenants 需要 fully independent skill libraries,并且这些 libraries 可单独 updated 时,此 pattern 很有用。有关 out of the box 处理 skill access、sharing 和 workspace-level visibility 的 managed solution,请参阅 Fleet skills

Skills for subagents

使用 subagents 时,你可以配置每种 subagent 可以 access 哪些 skills:
  • General-purpose subagent:当你向 create_deep_agent 传入 skills 时,会自动继承 main agent 的 skills。不需要额外配置。
  • Custom subagents:不会继承 main agent 的 skills。向每个 subagent definition 添加 skills parameter,并传入该 subagent 的 skill source paths。
Skill state 是 fully isolated:main agent 的 skills 对 subagents 不可见,subagent skills 对 main agent 不可见。
const researchSubagent = {
  name: "researcher",
  description: "Research assistant with specialized skills",
  systemPrompt: "You are a researcher.",
  tools: [webSearch],
  skills: ["/skills/research/", "/skills/web-search/"],  // Subagent-specific skills
};

const agent = await createDeepAgent({
  model: "google_genai:gemini-3.5-flash",
  skills: ["/skills/main/"],  // Main agent and GP subagent get these
  subagents: [researchSubagent],  // Researcher gets only its own skills
});
有关 subagent configuration 和 skills inheritance 的更多信息,请参阅 Subagents

Skill permissions

默认情况下,如果 backend 允许,agents 可以 write skill files。使用以下 mechanisms 控制该行为:
  • Read-only skills:使用 filesystem permissions deny skill paths 下的 write operations。
  • Scoped permissions:允许 writes 到 user-scoped skill paths,同时保持 workspace 或 shared skills read-only,让 agents 可以 personalize 自己的 skills,而不修改 shared skills。
  • Human-in-the-loop:使用 interrupt_on 要求 agent 执行 write operations 前获得 approval,在不完全 blocking writes 的情况下添加 review step。

Read-only skills

常见 production pattern 是让 agents access curated skills library,但不允许它们修改。将 /skills/ route 到 shared StoreBackend,在 skills 中传入该 route,并使用 filesystem permissions deny /skills/** 下的 write operations。Agent 可以 discover 和 read skills,而只有你的 application code 或 admin workflow 可以 update store。
import { InMemoryStore } from "@langchain/langgraph";
import {
  createDeepAgent,
  CompositeBackend,
  StateBackend,
  StoreBackend,
} from "deepagents";

const store = new InMemoryStore(); // Good for local dev; omit for LangSmith Deployment

const agent = createDeepAgent({
  model: "google-genai:gemini-3.5-flash",
  backend: new CompositeBackend(new StateBackend(), {
    "/skills/": new StoreBackend({
      namespace: (rt) => ["curated-skills", rt.context.orgId],
    }),
  }),
  skills: ["/skills/"],
  permissions: [
    {
      operations: ["write"],
      paths: ["/skills/**"],
      mode: "deny",
    },
  ],
  store,
});
在同一 namespace 下使用 /company-policies/SKILL.md 这样的 keys seed store,values 需要包含 contentencoding fields。从 store 读取 records 前,会 strip /skills/ route prefix。 将此模式用于 enterprise knowledge bases、approved tool instructions 或 shared skill packs,在这些场景中 agent 应受益于 centrally managed context,但不应 rewrite source of truth。如果希望 agents 保存自己的 learnings,请将 /memories/ 等 separate path route 到另一个启用 write permissions 的 backend。有关 routing 和 store setup,请参阅 Backends

Execute code with skills

没有 code execution 时,skills 是 passive:agent 读取 instructions,并使用 available tools 遵循它们。Code execution 会将 skills 转变为 active capabilities。Skill 可以携带 tested script,用于调用 API、transform data、validate output 或运行 pipeline,agent 会 deterministically 执行它,而不是每次都从 instructions 重新生成 logic。这对需要 exact behavior(data transformations、API integrations、compliance checks)或依赖 agent 无法仅通过 tool calls 使用的 libraries 的 workflows 尤其有价值。 Skills 通过两种方式支持 code execution:
  • 当 agent 需要 install dependencies、run tests、call CLIs 或处理 operating-system filesystem 时,使用 Sandbox scripts
  • 当 agent 需要可从 interpreter code 使用的 reusable、importable helpers 时,使用 Interpreter skills

Sandbox scripts

Skills 可以在 SKILL.md file 旁包含 scripts。在 SKILL.md 中 reference scripts,让 agent 知道它们存在以及何时运行:
skills/
└── arxiv-search/
    ├── SKILL.md
    └── scripts/
        └── search.ts
---
name: arxiv-search
description: Search the arXiv preprint repository for research papers. Use when the user asks about academic papers, recent research, or scientific literature.
---

# arxiv-search

Search arXiv for papers matching the user's query.

## Instructions

1. Run `scripts/search.ts` with the user's query as an argument.
2. Parse the results and present them with title, authors, abstract summary, and link.
3. If the user asks for more detail on a specific paper, fetch the full abstract.
Agent 可以从任何 backend read scripts,但若要 execute 它们,agent 需要 access shell,而这只有 sandbox backends 提供。 Sandbox backends 在 isolated containers 中运行。存储在 sandbox 外部的 skill files 在 sandbox 内不可用,这意味着除非先 transfer in,否则 agent 无法 execute skill scripts 或 access skill resources。使用 custom middleware 处理此 transfer:
  • before_agent:从 backend 读取 skill files 并 upload 到 sandbox,让 agent 从一开始就可以 execute scripts。
  • after_agent:从 sandbox download 任何 updated 或 newly created skill files,并 write back 到 backend,让 changes 跨 runs 持续存在。
import { readFile, readdir } from "node:fs/promises";
import { join, posix, relative, resolve } from "node:path";
import { fileURLToPath } from "node:url";

import { createMiddleware } from "langchain";
import {
  CompositeBackend,
  createDeepAgent,
  type FileData,
  StoreBackend,
} from "deepagents";
import { InMemoryStore } from "@langchain/langgraph";

import { DaytonaSandbox } from "@langchain/daytona";

/** Identical skill bundles for every user: one shared store namespace. */
const SKILLS_SHARED_NAMESPACE = ["skills", "builtin"] as const;

function createFileData(content: string): FileData {
  const now = new Date().toISOString();
  return {
    content: content.split("\n"),
    created_at: now,
    modified_at: now,
  };
}

function normalizeSkillsStoreKey(key: string): string {
  const k = String(key);
  if (k.includes("..") || /[*?]/.test(k)) {
    throw new Error(`Invalid key: ${key}`);
  }
  return k.startsWith("/") ? k : `/${k}`;
}

async function walkFiles(dir: string): Promise<string[]> {
  const entries = await readdir(dir, { withFileTypes: true });
  const files: string[] = [];
  for (const entry of entries) {
    const fullPath = join(dir, entry.name);
    if (entry.isDirectory()) {
      files.push(...(await walkFiles(fullPath)));
    } else if (entry.isFile()) {
      files.push(fullPath);
    }
  }
  return files.sort((a, b) => a.localeCompare(b));
}

/** Load canonical skill files from disk into the shared store namespace (run once at deploy).
 *  You can retrieve skills from any source (local filesystem, remote URL, etc.).
 */
async function seedSkillStore(store: InMemoryStore) {
  const moduleDir = resolve(fileURLToPath(new URL(".", import.meta.url)));
  const skillsDir = resolve(moduleDir, "skills");
  const filePaths = await walkFiles(skillsDir);
  for (const filePath of filePaths) {
    const rel = relative(skillsDir, filePath);
    // StoreBackend keys are paths *relative to the routed backend root*.
    // CompositeBackend strips the route prefix (`/skills/`) before delegating,
    // so store keys should look like "/<skillname>/SKILL.md".
    const key = `/${posix.normalize(rel.split("\\").join("/"))}`;
    const content = await readFile(filePath, "utf8");
    await store.put([...SKILLS_SHARED_NAMESPACE], key, createFileData(content));
  }
}

/** Copy shared skill files from the store into the sandbox before each agent run. */
function createSkillSandboxSyncMiddleware(backend: CompositeBackend) {
  return createMiddleware({
    name: "SkillSandboxSyncMiddleware",
    beforeAgent: async (state, runtime) => {
      const store = (runtime as any).store;
      if (!store) {
        throw new Error(
          "Store is required for syncing skills into the sandbox. " +
            "Pass `store` to createDeepAgent and ensure your runtime provides it.",
        );
      }

      const encoder = new TextEncoder();
      const files: Array<[string, Uint8Array]> = [];

      for (const item of await store.search([...SKILLS_SHARED_NAMESPACE])) {
        const normalized = normalizeSkillsStoreKey(String(item.key));
        const data = item.value as FileData;
        // CompositeBackend routes paths and batches uploads to the right backend.
        files.push([
          `/skills${normalized}`,
          encoder.encode(data.content.join("\n")),
        ]);
      }

      if (files.length > 0) await backend.uploadFiles(files);

      return state;
    },
  });
}

async function main() {
  const store = new InMemoryStore();
  await seedSkillStore(store);

  const sandbox = await DaytonaSandbox.create({
    language: "python",
    timeout: 300,
  });

  const backend = new CompositeBackend(sandbox, {
    "/skills/": new StoreBackend({
      store,
      namespace: () => [...SKILLS_SHARED_NAMESPACE],
    } as any),
  });

  try {
    const agent = await createDeepAgent({
      model: "google-genai:gemini-3.5-flash",
      backend,
      skills: ["/skills/"],
      store,
      middleware: [createSkillSandboxSyncMiddleware(backend)],
    });

  } finally {
    await sandbox.close();
  }
}

main().catch((err) => {
  console.error(err);
  process.exitCode = 1;
});
有关在 execution 前同时 seed skills 和 memories,并在之后同步回去的完整 example,请参阅 syncing skills and memories with custom middleware

Interpreter skills

Interpreter skills 会向 interpreter 暴露 code modules。Regular skills 给 agent instructions 和 context。Interpreter skills 还会给 agent 可从 interpreter code 调用的 importable functions。 这让你可以一次性打包 domain-specific logic,并将其作为 deterministic building block 提供。无需要求 model 从头 re-create parser、validator 或 aggregation routine,agent 可以 import tested helper,并将它与 tools、subagents 和 runtime state 组合。 将 interpreter skills 用于应具备以下特征的 code:
  • 可跨 prompts、agents 或 projects Reusable
  • 足够 Deterministic,需要每次获得相同行为
  • Too detailed,不适合作为 instructions 保留在 model context 中
To make a skill importable:
1

Add an entrypoint

在 skill 的 SKILL.md frontmatter 中添加 metadata.entrypoint key。该 value 是相对于 skill directory 的 JavaScript 或 TypeScript file path。
2

Configure skills normally

创建 agent 时,通过 skills argument 传入 skill source path。
3

Use the same backend

使用 SkillsMiddleware 用于加载 skill files 的同一个 backend 配置 interpreter middleware。
4

Import from interpreter code

Agent 使用 await import("@/skills/<name>") import helper module。
Minimal skill layout:
skills/
`-- order-helpers/
    |-- SKILL.md
    `-- scripts/
        `-- index.ts
---
name: order-helpers
description: Helper functions for normalizing and grouping order records.
metadata:
  entrypoint: scripts/index.ts
---

# order-helpers

Use this skill when order records need deterministic cleanup or aggregation.

Import these utilities into the REPL in order to interact with order data:

```typescript
const { groupByStatus } = await import("@/skills/order-helpers");
groupByStatus(...);
```
// skills/order-helpers/scripts/index.ts
interface Order {
  id: string;
  status: string;
}

export function groupByStatus(orders: Order[]) {
  return orders.reduce((acc, order) => {
    acc[order.status] = acc[order.status] ?? [];
    acc[order.status].push(order);
    return acc;
  }, {});
}
然后配置 agent:
import { createDeepAgent, StateBackend } from "deepagents";
import { createCodeInterpreterMiddleware } from "@langchain/quickjs";

const backend = new StateBackend();

const agent = createDeepAgent({
  model: "openai:gpt-5.4",
  backend,
  skills: ["/skills/"],
  middleware: [createCodeInterpreterMiddleware({ skillsBackend: backend })],
});
Agent 现在可以从 interpreter code import 该 module:
const { groupByStatus } = await import("@/skills/order-helpers");

const grouped = groupByStatus(orders);
grouped;

Reference

Skills, memory, and tools

Skills、memoryAGENTS.md files)和 tools 都为 agent 提供 context 或 capabilities。下表总结了何时使用各项:
SkillsMemoryTools
Purpose通过 progressive disclosure 发现的 on-demand capabilitiesStartup 时加载的 persistent contextAgent 可调用的 programmatic actions
Loading仅在 agent 判断相关时读取Agent start 时加载每一 turn 都可用
FormatNamed directories 中的 SKILL.mdAGENTS.md filesBound to the agent 的 functions
LayeringUser,然后 project(last wins)User,然后 project(combined)Agent creation 时定义
Use whenInstructions 是 task-specific 且可能较大Context 始终相关(project conventions、preferences)Agent 需要 programmatic action,或没有 file system access
这些是 guidelines,不是 hard boundaries。实践中,skills 和 memory 位于同一 spectrum 上。Agent 可以在工作时 update 自己的 skills,捕获 new procedures,并随时间 refine instructions。通过这种方式,skills 可以作为 progressive-disclosure memory 的一种形式:agent 构建并按需 retrieve 的 context,而不是每个 prompt 都加载。

Frontmatter fields

Agent Skills specification 定义以下 frontmatter fields:
FieldRequiredDescription
nameYesLowercase alphanumeric with hyphens,1-64 characters。必须匹配 parent directory name。
descriptionYesSkill 做什么以及何时使用。最多 1,024 characters。
licenseNoLicense name,或对 bundled license file 的 reference。
compatibilityNoEnvironment requirements(system packages、network access)。最多 500 characters。
metadataNo用于 additional properties 的 arbitrary key-value pairs。
allowed-toolsNoSkill 可使用的 pre-approved tools 的 space-separated list。Experimental。
---
name: langgraph-docs
description: Use this skill for requests related to LangGraph in order to fetch relevant documentation to provide accurate, up-to-date guidance.
license: MIT
compatibility: Requires internet access for fetching documentation URLs
metadata:
  author: langchain
  version: "1.0"
allowed-tools: fetch_url
---

# langgraph-docs

Instructions for the agent go here. See the [langgraph-docs example](#what-are-skills) for a complete example of skill instructions.
有关 detailed constraints 和 validation rules,请参阅完整 Agent Skills specification。在 Deep Agents 中,SKILL.md files 必须小于 10 MB。超过此限制的 files 会在 skill loading 期间被跳过。
有关更多 example skills,请参阅 Deep Agents example skills
使用 LangSmith trace agent 如何 discover 和 execute skills。按照 observability quickstart 完成设置。建议你同时设置 LangSmith Engine,它会监控 traces、检测问题,并提出修复建议。