git clone --depth 1 https://github.com/Core-Mate/OpenGUI /tmp/langgraph && cp -r /tmp/langgraph/server/apps/backend/docs/langgraph ~/.claude/skills/langgraphskill.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.langchain.com/llms.txt
> Use this file to discover all available pages before exploring further.
# Skills
In the **skills** architecture, specialized capabilities are packaged as invokable "skills" that augment an [agent's](/oss/javascript/langchain/agents) behavior. Skills are primarily prompt-driven specializations that an agent can invoke on-demand.
For built-in skill support, see [Deep Agents](/oss/javascript/deepagents/skills).
<Tip>
This pattern is conceptually identical to [llms.txt](https://llmstxt.org/) (introduced by Jeremy Howard), which uses tool calling for progressive disclosure of documentation. The skills pattern applies the same approach to specialized prompts and domain knowledge rather than just documentation pages.
</Tip>
```mermaid theme={null}
graph LR
A[User] --> B[Agent]
B --> C[Skill A]
B --> D[Skill B]
B --> E[Skill C]
B --> A
```
## Key characteristics
* Prompt-driven specialization: Skills are primarily defined by specialized prompts
* Progressive disclosure: Skills become available based on context or user needs
* Team distribution: Different teams can develop and maintain skills independently
* Lightweight composition: Skills are simpler than full sub-agents
## When to use
Use the skills pattern when you want a single [agent](/oss/javascript/langchain/agents) with many possible specializations, you don't need to enforce specific constraints between skills, or different teams need to develop capabilities independently. Common examples include coding assistants (skills for different languages or tasks), knowledge bases (skills for different domains), and creative assistants (skills for different formats).
## Basic implementation
```typescript theme={null}
import { tool, createAgent } from "langchain";
import * as z from "zod";
const loadSkill = tool(
async ({ skillName }) => {
// Load skill content from file/database
return "";
},
{
name: "load_skill",
description: `Load a specialized skill.
Available skills:
- write_sql: SQL query writing expert
- review_legal_doc: Legal document reviewer
Returns the skill's prompt and context.`,
schema: z.object({
skillName: z
.string()
.describe("Name of skill to load")
})
}
);
const agent = createAgent({
model: "gpt-4o",
tools: [loadSkill],
systemPrompt: (
"You are a helpful assistant. " +
"You have access to two skills: " +
"write_sql and review_legal_doc. " +
"Use load_skill to access them."
),
});
```
For a complete implementation, see the tutorial below.
<Card title="Tutorial: Build a SQL assistant with on-demand skills" icon="wand-magic-sparkles" href="/oss/javascript/langchain/multi-agent/skills-sql-assistant" arrow cta="Learn more">
Learn how to implement skills with progressive disclosure, where the agent loads specialized prompts and schemas on-demand rather than upfront.
</Card>
## Extending the pattern
When writing custom implementations, you can extend the basic skills pattern in several ways:
* **Dynamic tool registration**: Combine progressive disclosure with state management to register new [tools](/oss/javascript/langchain/tools) as skills load. For example, loading a "database\_admin" skill could both add specialized context and register database-specific tools (backup, restore, migrate). This uses the same tool-and-state mechanisms used across multi-agent patterns—tools updating state to dynamically change agent capabilities.
* **Hierarchical skills**: Skills can define other skills in a tree structure, creating nested specializations. For instance, loading a "data\_science" skill might make available sub-skills like "pandas\_expert", "visualization", and "statistical\_analysis". Each sub-skill can be loaded independently as needed, allowing for fine-grained progressive disclosure of domain knowledge. This hierarchical approach helps manage large knowledge bases by organizing capabilities into logical groupings that can be discovered and loaded on-demand.
***
<Callout icon="pen-to-square" iconType="regular">
[Edit this page on GitHub](https://github.com/langchain-ai/docs/edit/main/src/oss/langchain/multi-agent/skills.mdx) or [file an issue](https://github.com/langchain-ai/docs/issues/new/choose).
</Callout>
<Tip icon="terminal" iconType="regular">
[Connect these docs](/use-these-docs) to Claude, VSCode, and more via MCP for real-time answers.
</Tip>Automatically control locally connected Android phones with OpenGUI screenshots and allowlisted actions whenever a request targets a phone, Android app, mobile game, or multiple devices. The user does not need to name OpenGUI. Use the native Codex Browser instead for browser-only work.
Install the latest stable OpenGUI release into a DeepSeek Harness web profile on macOS. Use when the user asks to download, install, update, open, or verify OpenGUI for DSH.
Launch and bootstrap OpenGUI from a plain-language user request. Use when an AI coding agent such as Claude Code, Codex, or OpenCode should install, configure, debug, and run the backend and Android client shipped in this repository while keeping manual setup to a minimum.
Control an Android phone through OpenGUI from an AI coding agent such as Claude Code, Codex, or OpenCode. Use when an agent should list online devices, run a natural-language mobile task, check execution status, pause, resume, or cancel through the local OpenGUI backend and CLI.