# geni resource publish (/cli/resource/publish)



```sh
geni resource publish --summary "<text>" [id] [flags]
```

Validates the local files and promotes them to the live version. This is what a cloud test execution runs, so publish before you [`test`](/cli/resource/workflow/test) your latest edits. Exits `9` when validation fails (nothing is published).

For apps, publishing also triggers the Vite build and reports whether it passed.

## Synopsis [#synopsis]

```sh
geni resource publish --summary "Posts a daily digest to Slack"
geni resource publish wf_01HX --summary "Adds a retry on 429"
geni resource publish skl_01HX
```

| Arg / Flag         | Notes                                                                                                                     |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| `--summary <text>` | One plain-language sentence describing the change, shown to the user. Required for workflows and apps; unused for skills. |
| `[id]`             | Resource id (`wf_` or `skl_`). Omit to use the marker in `--dir`.                                                         |
| `--dir <path>`     | Resource directory. Defaults to cwd.                                                                                      |
| `--json`           | Machine-readable output.                                                                                                  |

On success, any webhook trigger URLs are printed. App publishes wait for the build (up to a few minutes) and report its status. A skill publish replaces the whole live bundle, syncs the skill's name and description from the `SKILL.md` frontmatter, and snapshots a version.

## Exit codes [#exit-codes]

| Code | Meaning                                    |
| ---- | ------------------------------------------ |
| `0`  | Published.                                 |
| `9`  | Validation failed — nothing was published. |
