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

# Publish a skill

> From a written skill to a public one: the benchmark it needs, the Publish dialog, what's checked and in what order, the plan, and how to update or unpublish it.

Publishing lists a skill you wrote in the public [Skills Registry](https://app.decimal.ai/skills), where anyone can find and add it. The skill stays in your organization.

The CLI has no `skills publish` command. You publish from the dashboard, or from code with the SDK or the API.

## Before you publish

1. **[Put the skill on DecimalAI](https://docs.decimal.ai/guides/authoring-skills.md#put-a-skill-you-wrote-on-decimalai).**
2. **Benchmark the latest version.** The check is that a benchmark finished, not that it scored well. A skill that fails its own benchmark can still publish.
3. **Check your plan.** Publishing is included from the Core plan up. See [Pricing](https://docs.decimal.ai/pricing.md).

```bash theme={null}
decimalai skills benchmark ./skills/refund-policy
```

That uploads your file and `eval.yaml`, then runs the suite on DecimalAI's runner, against your plan's quota. The result is **verified**, the only kind the registry shows and ranks.

A local run you pushed also satisfies the check, but it stays unverified: publishing doesn't verify it for you. Suites with validators or setup commands can only go this way. See [Benchmark it](https://docs.decimal.ai/guides/skillevaluation.md#verified-runs-hosted).

## The Publish dialog

Open the skill's page and click **Publish to Registry**, next to **Edit**. The **Public** row under **Settings → Sharing & access → Visibility** opens the same dialog.

| Field | What it does |
| - | - |
| **Public name (slug)** | The name others install, unique in the registry. Change it and your skill is renamed first. The line below shows the result: `Install: decimalai skills add refund-policy`. |
| **Category** | One of ten, such as Security, Testing or Data. The default is General. |
| **Author Display Name (optional)** | Your name or team name. Left empty, the registry shows your user id. |

A note may say the skill "doesn't yet include" sections such as a checklist. It's advice and blocks nothing. Click **Publish**.

If a check refuses, the dialog closes and the reason appears on the skill's page beside the button. With no suite or no run, it offers **Generate + run benchmark**, which writes starter cases, runs them against your quota and tries again. Other refusals offer **Re-run checks & retry**.

## The checks, in order

The first failure is the one you see. Fix it and publish again: attempts are free.

| # | Check | Refused when | Reason |
| :-: | - | - | - |
| 1 | You can edit the skill | You aren't its creator, a team editor or an org admin | `403` |
| 2 | It isn't a test probe | Its name or tags match an internal measurement probe | `eval_probe_not_publishable` |
| 3 | The name is free | Another public skill has it | `409` |
| 4 | Eval suite | The latest version has no graded case. Trigger-only cases don't count | `no_test_cases` |
| 5 | Benchmark | No finished run on this version, a run of a different suite, or over a quarter of its cases errored | `no_benchmark_run`, `benchmark_incomplete`, `benchmark_suite_mismatch`, `benchmark_error_dominated` |
| 6 | Safety scan | A critical finding in the text going public | `safety_blocked` |
| 7 | AI security review | The skill's purpose reads as unsafe | `intent_rejected` |
| 8 | Content-safety review | Prohibited content, or content it can't confirm is safe | `content_blocked`, `content_removed`, `content_unverified` |

[Fixing a blocked publish](https://docs.decimal.ai/guides/trust-safety/fixing-a-blocked-publish.md) explains checks 6 to 8 and how to [run them ahead of time](https://docs.decimal.ai/guides/trust-safety/fixing-a-blocked-publish.md#scan-before-you-publish).

## Publish from code

```python theme={null}
from decimalai.skill_router import SkillRouter

router = SkillRouter()  # uses the key from decimalai.init() or DECIMAL_API_KEY
router.publish_skill(
    "refund-policy",
    category="support",
    tags=["billing", "refunds"],
    author_display_name="Acme Support Team",
)
```

`category` is required, and only code can set tags. The API call is `POST /api/v1/skills/{name}/publish`, with the same fields as query parameters.

## What people see first

The skill page shows **New** until there's evidence for a [SkillScore](https://docs.decimal.ai/guides/skillscore.md). With one signal, usually a verified benchmark, the score sits in a dashed outline instead of a filled chip, and the page reads "Based on its benchmark." A benchmark with no lift and no saving in agent turns doesn't count.

## Update it later

You don't publish again. Edit the skill or [sync it](https://docs.decimal.ai/guides/authoring-skills.md#put-a-skill-you-wrote-on-decimalai): a changed body makes a new version, and that's the version the registry serves. Eval cases carry forward.

* **Safety checks run on the new version.** The scan always does, and an edit in the dashboard or API also reruns the AI reviews. A worse result can [take the skill out of the registry](https://docs.decimal.ai/guides/trust-safety/fixing-a-blocked-publish.md#when-a-live-skill-goes-bad).
* **The benchmark doesn't rerun.** Click **Run benchmark** or run `decimalai skills benchmark`.
* **The name is frozen.** A skill that has been public can't be renamed, so fork it for another name.

To change the author name or tags, call `publish_skill` again with every field you want to keep. Every check reruns. For what people who added your skill receive, see [Update, pin and fork](https://docs.decimal.ai/guides/update-pin-fork.md).

## Unpublish

Click **Unpublish** on the skill's page, or call `router.unpublish_skill("refund-policy")`. It takes effect at once, with no confirmation.

Visibility goes back to **Organization**, so everyone in your organization still sees it, and its versions are kept. Forks are untouched, and people already linked to it keep the versions it had while public. Publishing again runs every check again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.