# zenitya.json reference

Every project has a `zenitya.json` at its root. Commands find the nearest one
from the current directory up; `--config-file <path>` or `ZENITYA_CONFIG_FILE`
picks another.

```json
{
  "$schema": "https://zenitya.dev/schemas/project-v1.json",
  "configVersion": 1,
  "name": "orders",
  "entrypoint": "src/index.ts",
  "network": { "allowEgress": true }
}
```

The `$schema` line lets editors complete and check the file. The published
schema is generated from the same rules the CLI enforces.

## Fields

| Field           | Type     | Required                 | Description                                                                                                                                                                                |
| --------------- | -------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `$schema`       | `string` | no                       | The JSON Schema this file follows                                                                                                                                                          |
| `configVersion` | `1`      | yes                      | The version of this file's format                                                                                                                                                          |
| `name`          | `string` | yes                      | The project's slug, unique in the organization: lower-case letters, digits and hyphens, at most 63 characters, starting and ending with a letter or digit. Tools are named `<name>.<tool>` |
| `entrypoint`    | `string` | for tool projects        | The TypeScript module that default-exports the `Project`, relative to `zenitya.json` and inside its directory                                                                              |
| `network`       | `object` | no                       | `{ "allowEgress": boolean }`: whether deployed tools may open internet connections. Off when absent. See [secrets.md](secrets.md)                                                          |
| `skillsOnly`    | `true`   | for skills-only projects | The project publishes only `skills/` and has no code. Replaces `entrypoint` and `network`                                                                                                  |

Unknown fields are rejected, so a typo fails loudly instead of being ignored.

The first deploy of a `name` creates the project. Renaming it deploys a
different project, and agents and groups refer to tools by the project name,
so treat it as stable.

## Skills-only projects

```json
{ "configVersion": 1, "name": "playbooks", "skillsOnly": true }
```

See [Publishing skills](skills.md).
