---
title: "Library, Tools & Modules"
canonical: https://trickest.com/docs/developer-tools/cli/library-tools-modules
description: "Browse the public library, manage private tools, and create modules from the trickest CLI."
---

# Library, Tools & Modules

Three related surfaces: the **public library** (`library`), your vault's **private
tools** (`tool`), and reusable **modules** (`module` / `modules`).

<Info>
Building blocks concepts: [Tools](/docs/key-concepts/building-blocks/tools) and
[Modules](/docs/key-concepts/building-blocks/modules). Creating modules in the UI:
[Creating and using modules](/docs/using-the-app/workflow-and-executions/creating-and-using-modules).
</Info>

## `trickest library`

Browse the **public** tool and module catalog.

| Subcommand | Description |
|---|---|
| `library ls\|list [query]` | Search the library |
| `library info\|get <name>` | Inputs, outputs, usage for a tool or module |

```bash
trickest library ls amass
trickest library ls httpx --type tool --limit 10
trickest library info subfinder
```

| Flag | Description |
|---|---|
| `--type <types>` | `tool`, `script`, `module` (default: all three) |
| `--limit <n>` | Max results (default 20) |

Returns a **bare JSON array** of `{id, name, type, description, category}` entries.

## `trickest tool`

Manage **private tools** in your vault.

| Subcommand | Description |
|---|---|
| `tool list` | List private tools (paginated) |
| `tool create` | Create from a YAML definition |
| `tool update` | Update from YAML |
| `tool delete` | Delete a tool |

### `tool list` — paginated shape

Unlike most `ls` commands, `tool list` returns a **paginated API envelope**:

```json
{"next":"…page=2…","previous":null,"page":1,"last":15,"count":281,"results":[ … ]}
```

Use `jq '.results[]'` and follow `next` for more pages.

```bash
trickest tool list | jq '.results[0:5] | .[].name'
```

<Info>
Adding private tools via the UI:
[Adding private tools](/docs/using-the-app/private-execution-networking/adding-private-tools).
</Info>

## `trickest module`

Package a workflow (or parts of it) as a reusable module.

| Subcommand | Description |
|---|---|
| `module ls` | List modules |
| `module info\|get <name-or-id>` | Module details |
| `module search <query>` | Search the module library |
| `module create <name>` | Create module + backing workflow |
| `module update <id>` | Update name/description |
| `module rm <id>` | Delete |
| `module io` | Exposed inputs/outputs on active workflow |
| `module expose-input` / `unexpose-input` | Module interface primitives |
| `module expose-output` / `unexpose-output` | Module interface outputs |

### `module ls`

```bash
trickest module ls
trickest module ls --scope public --search discovery
```
```json
[{"id":"1087795e-…","name":"Module A","category":"","description":"","author":"you"}]
```

| Flag | Description |
|---|---|
| `--scope <scope>` | `mine`, `public`, or `all` (default `mine`) |
| `--search <query>` | Filter by name/description |
| `--category <cat>` | Filter by category |

### Module interface on the active workflow

`module io`, `expose-input`, and `expose-output` require an **active workflow**
context (see [Configuration & Context](/docs/developer-tools/cli/configuration)).

```bash
trickest module io
trickest module expose-input my-primitive --name target
trickest module expose-output scan-node --name findings
```

## Recipe: find a tool and add it to a workflow

```bash
trickest library info httpx | jq '{name, inputs, outputs}'
trickest workflow use "Discovery"
trickest node add httpx --tool httpx --from subfinder
trickest save
```

## Related

<CardGroup cols={2}>
  <Card title="Nodes & Connections" icon="circle-nodes" href="/docs/developer-tools/cli/nodes">
    Add library tools to the active workflow with `node add --tool`.
  </Card>
  <Card title="Search" icon="magnifying-glass" href="/docs/developer-tools/cli/search">
    Cross-resource search including tools and modules.
  </Card>
</CardGroup>

---
_Markdown source of https://trickest.com/docs/developer-tools/cli/library-tools-modules._
