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

# CLI

> Every tappify command an extension vendor runs, with its arguments and flags.

Every `tappify extension` and `tappify vendor` command takes `--json` and prints the same
object its human output describes, and runs two ways: with flags for scripts and agents, or
guided when you leave them off. This page is generated from the CLI's own command tree, so it
matches `tappify <command> --help` exactly. Do not edit it by hand; the next CLI release
overwrites it.

Installing it is on [Install the CLI](/extensions/start/install-the-cli). The commands for
deploying and signing an owner's app are in the
[CLI guide](/guides/cli/commands).

## `tappify login`

Authenticate with Tappify

```bash theme={null}
tappify login
```

## `tappify logout`

Log out of Tappify

```bash theme={null}
tappify logout
```

## `tappify vendor`

Manage your vendor account

```bash theme={null}
tappify vendor [options]
```

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

### `tappify vendor create`

Create a vendor account, its workspace and its sandbox project

```bash theme={null}
tappify vendor create [options]
```

| Flag                      | Does                                |
| ------------------------- | ----------------------------------- |
| `--name <name>`           | Name owners see in the Tap Store    |
| `--domain <domain>`       | Domain you publish from             |
| `--support-email <email>` | Address owners write to for support |
| `--json`                  | Print the result as JSON            |

## `tappify extension`

Also `tappify ext`.

Build, test and publish an extension

```bash theme={null}
tappify extension [options]
```

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

### `tappify extension init`

Scaffold an extension from the starter

```bash theme={null}
tappify extension init [dir] [options]
```

| Argument | Required | Is                                                |
| -------- | -------- | ------------------------------------------------- |
| `dir`    | no       | Directory to create; defaults to the extension id |

| Flag                    | Does                                            |
| ----------------------- | ----------------------------------------------- |
| `--id <id>`             | Id owners and the CLI use for this extension    |
| `--name <name>`         | Name owners see in the Tap Store                |
| `--description <text>`  | One sentence owners read in the Tap Store       |
| `--category <category>` | Section of the Tap Store this extension sits in |
| `--no-install`          | Skip installing dependencies                    |
| `--json`                | Print the result as JSON                        |

### `tappify extension add`

Add a contribution to the manifest and scaffold its files

```bash theme={null}
tappify extension add [kind] [name] [options]
```

| Argument | Required | Is                                                   |
| -------- | -------- | ---------------------------------------------------- |
| `kind`   | no       | Contribution kind to add; omit to choose from a list |
| `name`   | no       | Name the contribution is known by                    |

| Flag                    | Does                                                         |
| ----------------------- | ------------------------------------------------------------ |
| `--name <name>`         | Name this contribution is known by                           |
| `--page <page>`         | Host page the contribution renders on                        |
| `--slot <slot>`         | Anchor on the page the widget renders into                   |
| `--size <size>`         | Space the widget takes in the slot                           |
| `--expandable`          | Let owners expand the widget into a panel                    |
| `--table <table>`       | Host table whose row menu the action joins                   |
| `--chart <chart>`       | Host chart the series or marker draws on                     |
| `--metric <metric>`     | Connector metric this series draws                           |
| `--event <event>`       | Webhook event of yours the banner or marker draws            |
| `--glyph <glyph>`       | One or two characters drawn on the chart                     |
| `--scope <scope>`       | Who a document belongs to, or the permission an action needs |
| `--singleton`           | Keep one document per scope instead of many                  |
| `--kind <kind>`         | Whether the procedure reads or writes                        |
| `--as <as>`             | How the webhook reaches the owner                            |
| `--returns <returns>`   | Shape the assistant renders the tool result as               |
| `--cost <cost>`         | How expensive the tool is to run                             |
| `--surfaces <surfaces>` | Where the prompt is offered, comma separated                 |
| `--category <category>` | Group this knowledge file belongs to                         |
| `--sync <sync>`         | How often Tappify pulls your metrics                         |
| `--reversible`          | Say the owner can undo what the action does                  |
| `--when <when>`         | Moment the assistant asks for this context                   |
| `--work-kind <kind>`    | What owners create in your system                            |
| `--input`               | Collect input with a form before sending the prompt          |
| `--nav`                 | Add the page to the project navigation                       |
| `--no-mobile`           | Hide the contribution on phone layouts                       |
| `--json`                | Print the result as JSON                                     |

### `tappify extension remove`

Remove a contribution from the manifest and its files

```bash theme={null}
tappify extension remove [kind] [id] [options]
```

| Argument | Required | Is                                                      |
| -------- | -------- | ------------------------------------------------------- |
| `kind`   | no       | Contribution kind to remove; omit to choose from a list |
| `id`     | no       | Id of the contribution to remove                        |

| Flag             | Does                                          |
| ---------------- | --------------------------------------------- |
| `--delete-files` | Delete the files this contribution scaffolded |
| `--json`         | Print the result as JSON                      |

### `tappify extension list`

List the contributions and scopes this extension declares

```bash theme={null}
tappify extension list [options]
```

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

### `tappify extension set`

Set one field in the manifest

```bash theme={null}
tappify extension set [field] [value] [options]
```

| Argument | Required | Is                                                |
| -------- | -------- | ------------------------------------------------- |
| `field`  | no       | Manifest field to set; omit to choose from a list |
| `value`  | no       | New value for the field                           |

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

### `tappify extension scopes`

Add or remove the permissions owners grant at install

```bash theme={null}
tappify extension scopes [options]
```

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

#### `tappify extension scopes add`

Grant this extension one more scope

```bash theme={null}
tappify extension scopes add [key] [options]
```

| Argument | Required | Is                                           |
| -------- | -------- | -------------------------------------------- |
| `key`    | no       | Scope key to add; omit to choose from a list |

| Flag                     | Does                                               |
| ------------------------ | -------------------------------------------------- |
| `--justification <text>` | Sentence owners read about why you need this scope |
| `--json`                 | Print the result as JSON                           |

#### `tappify extension scopes remove`

Take one scope away from this extension

```bash theme={null}
tappify extension scopes remove [key] [options]
```

| Argument | Required | Is                                              |
| -------- | -------- | ----------------------------------------------- |
| `key`    | no       | Scope key to remove; omit to choose from a list |

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

### `tappify extension types`

Regenerate src/tappify.d.ts from the manifest and its schemas

```bash theme={null}
tappify extension types [options]
```

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

### `tappify extension dev`

Serve this extension and preview it while you edit

```bash theme={null}
tappify extension dev [options]
```

| Flag             | Does                                                      |
| ---------------- | --------------------------------------------------------- |
| `--port <port>`  | Port the dev server listens on                            |
| `--live`         | Install this build on your sandbox project                |
| `--server <url>` | Base URL the host calls for procedures during the session |
| `--remote <url>` | Preview a deployed remote entry instead of starting Vite  |
| `--json`         | Print the result as JSON                                  |

### `tappify extension doctor`

Run every check the Tap Store runs, here

```bash theme={null}
tappify extension doctor [options]
```

| Flag           | Does                                          |
| -------------- | --------------------------------------------- |
| `--fix`        | Apply the fixes that cannot change behaviour  |
| `--skip-build` | Leave the build, the bundle and the tests out |
| `--offline`    | Run only the checks that need no network      |
| `--json`       | Print the result as JSON                      |

### `tappify extension publish`

Build, check and send this release to the Tap Store

```bash theme={null}
tappify extension publish [options]
```

| Flag              | Does                                                      |
| ----------------- | --------------------------------------------------------- |
| `--notes <notes>` | What changed in this release, for owners and the reviewer |
| `--skip-doctor`   | Publish without running the checks first                  |
| `--yes`           | Answer every confirmation yes                             |
| `--json`          | Print the result as JSON                                  |

### `tappify extension retire`

Take this extension out of the Tap Store and every install

```bash theme={null}
tappify extension retire [options]
```

| Flag     | Does                        |
| -------- | --------------------------- |
| `--yes`  | Skip the typed confirmation |
| `--json` | Print the result as JSON    |

### `tappify extension status`

Show the live release, the release in review and the installs

```bash theme={null}
tappify extension status [options]
```

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

### `tappify extension whoami`

Show the vendor, your role and the sandbox project

```bash theme={null}
tappify extension whoami [options]
```

| Flag     | Does                     |
| -------- | ------------------------ |
| `--json` | Print the result as JSON |

## `tappify mcp`

Serves the MCP server for agents over stdio

```bash theme={null}
tappify mcp
```
