# geni resource validate (/cli/resource/validate)



```sh
geni resource validate [id] [flags]
```

Ships your local files to the cloud and validates them without publishing: spec compliance, credential and const wiring, and — for code workflows — a server-side TypeScript check (for apps, the design-system lint and handler references; for skills, the `SKILL.md` frontmatter contract and that every linked file exists). Exits `9` on validation failure, so scripts can gate on it.

This is the real compile gate. Don't run `tsc` / `npm install` locally; `@general-input/core` only resolves server-side, so a local compile always fails on the missing module.

## Synopsis [#synopsis]

```sh
geni resource validate            # uses the marker in cwd
geni resource validate wf_01HX
geni resource validate --json
```

| Arg / Flag     | Notes                                                             |
| -------------- | ----------------------------------------------------------------- |
| `[id]`         | Resource id (`wf_` or `skl_`). Omit to use the marker in `--dir`. |
| `--dir <path>` | Resource directory. Defaults to cwd.                              |
| `--json`       | Machine-readable output.                                          |

## Exit codes [#exit-codes]

| Code | Meaning                                     |
| ---- | ------------------------------------------- |
| `0`  | Valid — ready to publish.                   |
| `9`  | Validation failed (the errors are printed). |

A green validate means it's ready to [`publish`](/cli/resource/publish).
