***

title: SkillManager
slug: /reference/typescript/agents/skill-manager
description: Manages the lifecycle of skills attached to an agent.
max-toc-depth: 3
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[ref-skillbase]: /docs/server-sdks/reference/typescript/agents/skill-base

[ref-agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base

`SkillManager` handles loading, unloading, validation, and aggregation of skill
tools, hints, global data, and prompt sections. You rarely interact with
SkillManager directly — [`AgentBase`][ref-agentbase] delegates to it internally.
Import it when you need direct control over skill lifecycle outside an agent.

```typescript {1}
import { SkillManager } from '@signalwire/sdk';
```

<Note>
  Most users should use `AgentBase.addSkill()`, `AgentBase.removeSkill()`, and
  `AgentBase.listSkills()` instead of interacting with SkillManager directly.
</Note>

## **Properties**

<ParamField path="size" type="number" toc={true}>
  The number of currently loaded skill instances (getter).
</ParamField>

## **Methods**

<CardGroup cols={3}>
  <Card title="addSkill" href="/docs/server-sdks/reference/typescript/agents/skill-manager/add-skill">
    Add and initialize a skill instance.
  </Card>

  <Card title="removeSkill" href="/docs/server-sdks/reference/typescript/agents/skill-manager/remove-skill">
    Remove a skill by key or ID.
  </Card>

  <Card title="removeSkillByName" href="/docs/server-sdks/reference/typescript/agents/skill-manager/remove-skill-by-name">
    Remove all instances of a named skill.
  </Card>

  <Card title="hasSkill" href="/docs/server-sdks/reference/typescript/agents/skill-manager/has-skill">
    Check if a skill is loaded.
  </Card>

  <Card title="getSkill" href="/docs/server-sdks/reference/typescript/agents/skill-manager/get-skill">
    Get a skill instance by key or ID.
  </Card>

  <Card title="listSkills" href="/docs/server-sdks/reference/typescript/agents/skill-manager/list-skills">
    List all loaded skill instances.
  </Card>

  <Card title="getAllTools" href="/docs/server-sdks/reference/typescript/agents/skill-manager/get-all-tools">
    Aggregate tool definitions from all skills.
  </Card>

  <Card title="getAllPromptSections" href="/docs/server-sdks/reference/typescript/agents/skill-manager/get-all-prompt-sections">
    Aggregate prompt sections from all skills.
  </Card>

  <Card title="getAllHints" href="/docs/server-sdks/reference/typescript/agents/skill-manager/get-all-hints">
    Aggregate speech recognition hints.
  </Card>

  <Card title="getMergedGlobalData" href="/docs/server-sdks/reference/typescript/agents/skill-manager/get-merged-global-data">
    Merge global data from all skills.
  </Card>

  <Card title="getLoadedSkillEntries" href="/docs/server-sdks/reference/typescript/agents/skill-manager/get-loaded-skill-entries">
    Get metadata for all loaded skills.
  </Card>

  <Card title="clear" href="/docs/server-sdks/reference/typescript/agents/skill-manager/clear">
    Remove all skills.
  </Card>
</CardGroup>

## **Example**

```typescript {3,5-6}
import { SkillManager, DateTimeSkill, MathSkill } from '@signalwire/sdk';

const manager = new SkillManager();
await manager.addSkill(new DateTimeSkill());
await manager.addSkill(new MathSkill());
console.log(`${manager.size} skills loaded`);
console.log(manager.listSkills());
```