> For the complete documentation index, see [llms.txt](https://docs.tessl.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tessl.io/creating-skills-and-plugins/publish-and-update.md).

# Publish and update

{% hint style="info" %}
**Takeaway** Publish a skill or plugin with `tessl skill publish` or `tessl plugin publish`. It goes to your workspace as private by default. Bump the version to ship an update, and request public visibility only when you want anyone to install it.
{% endhint %}

Publishing puts a skill or plugin on the [Tessl Registry](https://tessl.io/registry) so it can be installed by name. This page covers the publish command, visibility, and versioning. Rolling context out across many repositories, and the GitHub-based publishing flow, are covered in [Distribute](/distribute/distributing-via-registry.md).

{% hint style="info" %}
Your agent can run this step too: `tessl install tessl/plugin-creator`
{% endhint %}

## Publish

From the skill or plugin directory, or with a path:

```bash
tessl plugin publish ./api-conventions --workspace engteam
```

`engteam` is a stand-in workspace. Run `tessl workspace list` and use one of yours.

A single skill uses the same flow through `tessl skill publish`. Both publish to your workspace as **private**: only workspace members can install it.

| Flag                         | Purpose                                                                           |
| ---------------------------- | --------------------------------------------------------------------------------- |
| `--workspace`                | Workspace to publish under. Required when non-interactive.                        |
| `--dry-run`                  | Run every pre-publish check without publishing. Use it first.                     |
| `--bump patch\|minor\|major` | Bump the version automatically if the current one already exists on the registry. |
| `--skip-evals`               | Skip publishing the eval scenarios in `evals/`.                                   |
| `--version`                  | Publish a specific version (plugin publish).                                      |

On publish, Tessl lints and reviews the content automatically, and the review score appears on the registry. See [Check a skill's quality using review](/improving-your-skills/reviewing-skills.md).

## Install it

Once published, you or your workspace can install it in any project:

```bash
tessl install engteam/api-conventions
tessl install engteam/api-conventions@1.2.0
```

To let teammates install a private plugin, add them to the workspace with `tessl workspace add-member`. See [Workspaces](/reference/workspaces.md).

## Ship an update

1. Make your changes.
2. Bump `version` in `.tessl-plugin/plugin.json` following [semantic versioning](https://semver.org/): patch for fixes, minor for backward-compatible additions, major for breaking changes.
3. Validate with `tessl plugin lint`.
4. Publish again.

```bash
tessl plugin publish ./api-conventions --workspace engteam
```

Anyone who installed it updates by running `tessl install engteam/api-conventions` again, which fetches the latest version.

## Make it public

Public means anyone can discover and install it. It is irreversible, so it needs approval first:

1. Open your plugin or skill in the [Tessl Registry](https://tessl.io/registry) and sign in.
2. Select **Actions** then **Make Public**, and confirm the request.

Once approved, set the visibility and publish again:

* **A plugin** takes its visibility from the `private` field in `.tessl-plugin/plugin.json`. Set `"private": false` and publish.
* **A skill** can be published public directly with `--public`:

```bash
tessl skill publish ./my-skill --workspace engteam --public
```

See [Sharing with your team and publicly](/distribute/sharing-plugins-publicly.md) for more.

## Remove or deprecate

Published something you should not have, or no longer want it installed? There is no hard delete, but two options cover it. Both use `tessl plugin` whether you published a skill or a plugin.

To drop one skill from a plugin that contains others, delete the skill file and publish a new version with `tessl plugin publish`. The old version remains on the registry; the new version simply omits the skill.

* **Unpublish** removes a version as if it was never published. It has a short time limit, a couple of days after publishing:

```bash
tessl plugin unpublish --plugin engteam/api-conventions@0.1.0
```

* **Archive** hides it from search but keeps it working for anyone who already references it, so existing installs do not break:

```bash
tessl plugin archive --plugin engteam/api-conventions --reason "superseded"
```

To simply stop new people finding it, you can also make it private again: set `"private": true` in the manifest and republish, or change visibility from the registry UI.

## Next

* [Distributing via registry](/distribute/distributing-via-registry.md) - archive, unpublish, and monitor usage.
* [Distribute plugins across multiple repositories](/distribute/distribute-plugins-across-multiple-repositories.md) - push plugins across many repos.
* [Improving your skills](/improving-your-skills/overview-improving-skills-and-plugins.md) - raise quality before you publish widely.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.tessl.io/creating-skills-and-plugins/publish-and-update.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
