> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Skills

> Skills are reusable, instruction-driven capabilities in Orq.ai. Define a task once and plug it into any agent, prompt, or Jinja template that needs it.

Skills are reusable, instruction-driven capabilities that tell an **Agent** how to perform a specific task reliably, using the right context, tools, steps, and output format. Attach a Skill to an Agent so it can invoke it on demand when relevant, or reference it statically inside agent instructions, [**Prompts**](/docs/ai-studio/prompts/prompts), and Jinja templates using `{{skill.key}}`. Any update to a Skill propagates automatically to every reference.

## Use Cases

<AccordionGroup>
  <Accordion title="Modular agent capabilities" icon="puzzle-piece">
    Build agents that invoke specialized Skills on demand: a support agent that draws on a "summarize thread" Skill only when the conversation warrants it, or a research agent that invokes a "extract key claims" Skill selectively.
  </Accordion>

  <Accordion title="Shared tone and brand voice" icon="pen-nib">
    Package your brand guidelines, writing style, or response format rules into a Skill and embed it across every agent and prompt that needs it. Update once and the change propagates everywhere.
  </Accordion>

  <Accordion title="Reusable domain expertise" icon="brain">
    Encode compliance rules, classification criteria, or structured output schemas as Skills. Any team building on top of the same agents or prompts shares the same versioned definition without duplication.
  </Accordion>
</AccordionGroup>

## Using Skills with Agents

Open the **Skills** section in the agent configuration, click <kbd><Icon icon="circle-plus" /> Skills</kbd>, and search for the Skill to attach it. Once attached, the agent can invoke it when relevant, without the Skill being present in the instructions at all times. Use this for capabilities the agent should draw on selectively depending on the conversation, for example a "summarize thread" Skill invoked only when the user asks for a summary.

<Frame caption="Attaching a Skill to an agent for on-demand invocation.">
  <img src="https://mintcdn.com/orqai/OX21UynKQhDoBJpH/images/add-skill-agent.png?fit=max&auto=format&n=OX21UynKQhDoBJpH&q=85&s=a62e91ec42d2e3fe4f8b813372f56bee" alt="Agent configuration panel with a Skill attached for on-demand invocation." width="552" height="288" data-path="images/add-skill-agent.png" />
</Frame>

Any update to a Skill propagates automatically to every agent that has it attached.

## Creating a Skill

<Tabs>
  <Tab title="AI Studio" icon="https://mintcdn.com/orqai/My16MDKJXrKALEHC/images/logos/ai-studio-round.svg?fit=max&auto=format&n=My16MDKJXrKALEHC&q=85&s=ac04dd509320d58ab9701cb6d6137733" width="100" height="100" data-path="images/logos/ai-studio-round.svg">
    Choose a [Project](/docs/ai-studio/get-started/projects) and Folder, select the <kbd><Icon icon="plus" /></kbd> button, and choose **Skill**.

    Fill in a key that will be used to reference the Skill and configure the content.

    <Frame caption="Creating a Skill in AI Studio.">
      <img src="https://mintcdn.com/orqai/Kigzl_vPd2sIGwOq/images/skill.png?fit=max&auto=format&n=Kigzl_vPd2sIGwOq&q=85&s=da0137524993bdf006c694bdc7e972e1" alt="Creating a Skill in AI Studio." width="1548" height="717" data-path="images/skill.png" />
    </Frame>
  </Tab>

  <Tab title="API & SDK" icon="code">
    <CodeGroup>
      ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
      curl -X POST https://api.orq.ai/v2/skills \
        -H "Authorization: Bearer $ORQ_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "display_name": "summarize-thread",
          "description": "Summarizes a support conversation in 3 bullet points",
          "instructions": "Summarize the conversation in exactly 3 bullet points. Be concise.",
          "tags": ["support", "summarization"],
          "path": "Default/Skills"
        }'
      ```

      ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
      from orq_ai_sdk import Orq
      import os

      orq = Orq(api_key=os.environ["ORQ_API_KEY"])

      result = orq.skills.create(
          display_name="summarize-thread",
          description="Summarizes a support conversation in 3 bullet points",
          instructions="Summarize the conversation in exactly 3 bullet points. Be concise.",
          tags=["support", "summarization"],
          path="Default/Skills",
      )
      print(result.skill.skill_id)
      ```

      ```typescript Node theme={"theme":{"light":"github-light","dark":"github-dark"}}
      import { Orq } from "@orq-ai/node";

      const orq = new Orq({ apiKey: process.env["ORQ_API_KEY"] ?? "" });

      const result = await orq.skills.create({
        displayName: "summarize-thread",
        description: "Summarizes a support conversation in 3 bullet points",
        instructions: "Summarize the conversation in exactly 3 bullet points. Be concise.",
        tags: ["support", "summarization"],
        path: "Default/Skills",
      });
      console.log(result.skill?.skillId);
      ```
    </CodeGroup>

    <Tip>See the full [Create Skill API reference](/reference/skills/create-a-new-skill).</Tip>
  </Tab>

  <Tab title="MCP" icon="https://mintcdn.com/orqai/i7ZhKI7LFRfXU7ox/images/logos/mcp.svg?fit=max&auto=format&n=i7ZhKI7LFRfXU7ox&q=85&s=cef7916eb5fe1f6bb97541398d3f7639" width="16" height="16" data-path="images/logos/mcp.svg">
    ```prompt wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
    Create a skill called "summarize-thread" that summarizes a support conversation in 3 bullet points
    ```

    The assistant uses `create_skill` with the display name, instructions, and any tags.
  </Tab>
</Tabs>

## Managing Skills

### List

<Tabs>
  <Tab title="API & SDK" icon="code">
    <CodeGroup>
      ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
      curl https://api.orq.ai/v2/skills \
        -H "Authorization: Bearer $ORQ_API_KEY"
      ```

      ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
      from orq_ai_sdk import Orq
      import os

      orq = Orq(api_key=os.environ["ORQ_API_KEY"])

      result = orq.skills.list()
      for skill in result.data:
          print(skill.skill_id, skill.display_name)
      ```

      ```typescript Node theme={"theme":{"light":"github-light","dark":"github-dark"}}
      import { Orq } from "@orq-ai/node";

      const orq = new Orq({ apiKey: process.env["ORQ_API_KEY"] ?? "" });

      const result = await orq.skills.list();
      for (const skill of result.data) {
        console.log(skill.skillId, skill.displayName);
      }
      ```
    </CodeGroup>

    <Tip>See the full [List Skills API reference](/reference/skills/list-all-skills).</Tip>
  </Tab>

  <Tab title="MCP" icon="https://mintcdn.com/orqai/i7ZhKI7LFRfXU7ox/images/logos/mcp.svg?fit=max&auto=format&n=i7ZhKI7LFRfXU7ox&q=85&s=cef7916eb5fe1f6bb97541398d3f7639" width="16" height="16" data-path="images/logos/mcp.svg">
    ```prompt wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
    List all skills in my workspace
    ```

    The assistant uses `list_skills` and returns all skills with their keys and descriptions.
  </Tab>
</Tabs>

### Get

<Tabs>
  <Tab title="API & SDK" icon="code">
    The `skill_id` parameter accepts either the generated skill ID (e.g. `skill_01H...`) or the display name.

    <CodeGroup>
      ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
      curl https://api.orq.ai/v2/skills/summarize-thread \
        -H "Authorization: Bearer $ORQ_API_KEY"
      ```

      ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
      from orq_ai_sdk import Orq
      import os

      orq = Orq(api_key=os.environ["ORQ_API_KEY"])

      result = orq.skills.get(skill_id="summarize-thread")
      print(result.skill.display_name)
      ```

      ```typescript Node theme={"theme":{"light":"github-light","dark":"github-dark"}}
      import { Orq } from "@orq-ai/node";

      const orq = new Orq({ apiKey: process.env["ORQ_API_KEY"] ?? "" });

      const result = await orq.skills.get({ skillId: "summarize-thread" });
      console.log(result.skill?.displayName);
      ```
    </CodeGroup>

    <Tip>See the full [Get Skill API reference](/reference/skills/retrieve-a-skill).</Tip>
  </Tab>

  <Tab title="MCP" icon="https://mintcdn.com/orqai/i7ZhKI7LFRfXU7ox/images/logos/mcp.svg?fit=max&auto=format&n=i7ZhKI7LFRfXU7ox&q=85&s=cef7916eb5fe1f6bb97541398d3f7639" width="16" height="16" data-path="images/logos/mcp.svg">
    ```prompt wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
    Get the details of skill "summarize-thread"
    ```

    The assistant uses `get_skill` with the skill key and returns the full skill configuration.
  </Tab>
</Tabs>

### Update

<Tabs>
  <Tab title="AI Studio" icon="https://mintcdn.com/orqai/My16MDKJXrKALEHC/images/logos/ai-studio-round.svg?fit=max&auto=format&n=My16MDKJXrKALEHC&q=85&s=ac04dd509320d58ab9701cb6d6137733" width="100" height="100" data-path="images/logos/ai-studio-round.svg">
    Open the Skill in **AI Studio**, edit the content or settings, and save to publish the update. All references update automatically.
  </Tab>

  <Tab title="API & SDK" icon="code">
    The `skill_id` parameter accepts either the generated skill ID (e.g. `skill_01H...`) or the display name.

    <CodeGroup>
      ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
      curl -X PATCH https://api.orq.ai/v2/skills/summarize-thread \
        -H "Authorization: Bearer $ORQ_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "instructions": "Summarize in 3 bullet points. Include a confidence score."
        }'
      ```

      ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
      from orq_ai_sdk import Orq
      import os

      orq = Orq(api_key=os.environ["ORQ_API_KEY"])

      result = orq.skills.update(
          skill_id="summarize-thread",
          instructions="Summarize in 3 bullet points. Include a confidence score.",
      )
      print(result.skill.skill_id)
      ```

      ```typescript Node theme={"theme":{"light":"github-light","dark":"github-dark"}}
      import { Orq } from "@orq-ai/node";

      const orq = new Orq({ apiKey: process.env["ORQ_API_KEY"] ?? "" });

      const result = await orq.skills.update({
        skillId: "summarize-thread",
        updateSkillRequest: {
          instructions: "Summarize in 3 bullet points. Include a confidence score.",
        },
      });
      console.log(result.skill?.skillId);
      ```
    </CodeGroup>

    <Tip>See the full [Update Skill API reference](/reference/skills/update-a-skill).</Tip>
  </Tab>

  <Tab title="MCP" icon="https://mintcdn.com/orqai/i7ZhKI7LFRfXU7ox/images/logos/mcp.svg?fit=max&auto=format&n=i7ZhKI7LFRfXU7ox&q=85&s=cef7916eb5fe1f6bb97541398d3f7639" width="16" height="16" data-path="images/logos/mcp.svg">
    ```prompt wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
    Update skill "summarize-thread" with revised instructions that include a confidence score
    ```

    The assistant uses `update_skill` with the skill key and new content.
  </Tab>
</Tabs>

### Delete

<Tabs>
  <Tab title="AI Studio" icon="https://mintcdn.com/orqai/My16MDKJXrKALEHC/images/logos/ai-studio-round.svg?fit=max&auto=format&n=My16MDKJXrKALEHC&q=85&s=ac04dd509320d58ab9701cb6d6137733" width="100" height="100" data-path="images/logos/ai-studio-round.svg">
    Open the Skill in **AI Studio**, open the context menu, and select **Delete**.
  </Tab>

  <Tab title="API & SDK" icon="code">
    The `skill_id` parameter accepts either the generated skill ID (e.g. `skill_01H...`) or the display name.

    <CodeGroup>
      ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
      curl -X DELETE https://api.orq.ai/v2/skills/summarize-thread \
        -H "Authorization: Bearer $ORQ_API_KEY"
      ```

      ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
      from orq_ai_sdk import Orq
      import os

      orq = Orq(api_key=os.environ["ORQ_API_KEY"])

      orq.skills.delete(skill_id="summarize-thread")
      ```

      ```typescript Node theme={"theme":{"light":"github-light","dark":"github-dark"}}
      import { Orq } from "@orq-ai/node";

      const orq = new Orq({ apiKey: process.env["ORQ_API_KEY"] ?? "" });

      await orq.skills.delete({ skillId: "summarize-thread" });
      ```
    </CodeGroup>

    <Tip>See the full [Delete Skill API reference](/reference/skills/delete-a-skill).</Tip>
  </Tab>

  <Tab title="MCP" icon="https://mintcdn.com/orqai/i7ZhKI7LFRfXU7ox/images/logos/mcp.svg?fit=max&auto=format&n=i7ZhKI7LFRfXU7ox&q=85&s=cef7916eb5fe1f6bb97541398d3f7639" width="16" height="16" data-path="images/logos/mcp.svg">
    ```prompt wrap theme={"theme":{"light":"github-light","dark":"github-dark"}}
    Delete skill "summarize-thread"
    ```

    The assistant uses `delete_skill` with the skill key.
  </Tab>
</Tabs>

## Static references with `{{skill.key}}`

<Note>
  Prompt Snippets are now Skills. The `{{snippet.key}}` syntax is replaced by `{{skill.key}}`.
</Note>

Reference a Skill using `{{skill.key}}`, where `key` is the key you set when creating the Skill. The Skill content is injected at that position every time it is rendered, and any update to the Skill is automatically reflected in every reference.

This works in:

* **Agent instructions**: inject content that should always be present on every run, such as a company policy block or a standard output format. See [Agent Studio](/docs/ai-studio/ai-engineering/build-agents#configure-instructions) for more on writing instructions.
* **[Prompts](/docs/ai-studio/prompts/prompts)**: compose prompts from reusable blocks instead of duplicating text.
* **Jinja templates**: combine `{{skill.key}}` references with Jinja expressions to compose dynamic, structured prompts from reusable blocks deterministically.

<Frame caption="Using a Skill to enrich a configured prompt.">
  <img src="https://mintcdn.com/orqai/x_6IXnot9ETOc_0g/images/docs/7374b405d08210a64a932ad62b8c2a5bb54b6ace9b694fd1d9d81912c3bfae79-Screenshot_2024-10-11_at_16.15.21.png?fit=max&auto=format&n=x_6IXnot9ETOc_0g&q=85&s=98b70193724c820a01edc9a45cd7bf4f" alt="Using a Skill to enrich a configured prompt." width="2802" height="878" data-path="images/docs/7374b405d08210a64a932ad62b8c2a5bb54b6ace9b694fd1d9d81912c3bfae79-Screenshot_2024-10-11_at_16.15.21.png" />
</Frame>
