***

title: SkillRegistry
slug: /reference/typescript/agents/skill-registry
description: Global singleton registry for discovering and instantiating skills.
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-skills]: /docs/server-sdks/reference/typescript/agents/skills

`SkillRegistry` is a global singleton for registering, discovering, and
instantiating skills by name. Skills can be registered programmatically or
auto-discovered from directories via the `SIGNALWIRE_SKILL_PATHS` environment
variable.

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

## **Methods**

<CardGroup cols={3}>
  <Card title="getInstance" href="/docs/server-sdks/reference/typescript/agents/skill-registry/get-instance">
    Get the global singleton instance.
  </Card>

  <Card title="register" href="/docs/server-sdks/reference/typescript/agents/skill-registry/register">
    Register a skill factory by name.
  </Card>

  <Card title="create" href="/docs/server-sdks/reference/typescript/agents/skill-registry/create">
    Create a skill instance from the registry.
  </Card>

  <Card title="has" href="/docs/server-sdks/reference/typescript/agents/skill-registry/has">
    Check if a skill name is registered.
  </Card>

  <Card title="unregister" href="/docs/server-sdks/reference/typescript/agents/skill-registry/unregister">
    Remove a skill registration.
  </Card>

  <Card title="lock" href="/docs/server-sdks/reference/typescript/agents/skill-registry/lock">
    Lock skill names to prevent overwriting.
  </Card>

  <Card title="listRegistered" href="/docs/server-sdks/reference/typescript/agents/skill-registry/list-registered">
    List all registered skill names.
  </Card>

  <Card title="listRegisteredWithManifests" href="/docs/server-sdks/reference/typescript/agents/skill-registry/list-registered-with-manifests">
    List skills with manifests.
  </Card>

  <Card title="getManifest" href="/docs/server-sdks/reference/typescript/agents/skill-registry/get-manifest">
    Get a skill's manifest.
  </Card>

  <Card title="addSearchPath" href="/docs/server-sdks/reference/typescript/agents/skill-registry/add-search-path">
    Add a directory for skill discovery.
  </Card>

  <Card title="getSearchPaths" href="/docs/server-sdks/reference/typescript/agents/skill-registry/get-search-paths">
    Get all skill search paths.
  </Card>

  <Card title="discoverFromDirectory" href="/docs/server-sdks/reference/typescript/agents/skill-registry/discover-from-directory">
    Discover skills from a directory.
  </Card>

  <Card title="discoverAll" href="/docs/server-sdks/reference/typescript/agents/skill-registry/discover-all">
    Discover skills from all search paths.
  </Card>

  <Card title="getSkillSchema" href="/docs/server-sdks/reference/typescript/agents/skill-registry/get-skill-schema">
    Get a skill's parameter schema.
  </Card>

  <Card title="getAllSkillsSchema" href="/docs/server-sdks/reference/typescript/agents/skill-registry/get-all-skills-schema">
    Get schemas for all registered skills.
  </Card>

  <Card title="listAllSkillSources" href="/docs/server-sdks/reference/typescript/agents/skill-registry/list-all-skill-sources">
    List skills grouped by source.
  </Card>

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

## **Properties**

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

## **Example**

```typescript {4-5,8}
import { SkillRegistry, SkillBase } from '@signalwire/sdk';

const registry = SkillRegistry.getInstance();
registry.register('my-skill', (config) => new MySkill(config));
console.log(registry.listRegistered()); // ['my-skill', ...]

// Create an instance from the registry
const skill = registry.create('my-skill', { apiKey: 'abc' });
```