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

# Manifest

> The discovery document Atlas reads from the customer gateway.

## Purpose

The manifest tells Atlas what the gateway can do.

It should be stable, explicit, and machine-readable.

## Top-level shape

```json theme={null}
{
  "version": "2026-03-18",
  "gateway": {},
  "agent": {},
  "actions": [],
  "callbacks": {
    "jobResults": true,
    "approvals": true
  }
}
```

## Gateway metadata

The `gateway` object should describe:

* `id`
* `name`
* `url`
* optional `description`
* auth mode
* high-level capabilities such as async jobs, callbacks, and approvals

## Agent metadata

The `agent` block is descriptive metadata from the customer side.

It can identify the internal system or capability layer behind the gateway, but it is not an Atlas agent definition.

## Actions

Actions are the actual callable units.

Each action should expose:

* optional `id`
* `name`
* optional `title`
* `description`
* `executionMode`
* `inputSchema`
* optional `outputSchema`
* optional `outputDescription`
* `requiresApproval`
* `sideEffectLevel`
* `idempotent`
* optional `timeoutMs`
* optional `scopes`
* optional `tags`

## Schema guidance

Keep the schema subset simple and provider-safe.

Good:

* `type`
* `properties`
* `required`
* `items`
* `enum`
* `additionalProperties`

Avoid in v1:

* `$ref`
* `oneOf`
* `anyOf`
* deep schema indirection

## Strict-safe input schemas

Atlas is moving toward exposing gateway actions as first-class typed tools whenever the manifest schema is clean enough.

That works best when action `inputSchema` follows a strict-safe shape:

* root schema is always an object
* `additionalProperties: false`
* include `required: []` even for no-input actions
* if a field is optional, prefer a nullable required field instead of omitting it from `required`

Examples:

No-input action:

```json theme={null}
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
```

Optional field, strict-safe:

```json theme={null}
{
  "type": "object",
  "properties": {
    "date": {
      "type": ["string", "null"],
      "description": "Optional report date in YYYY-MM-DD format."
    }
  },
  "required": ["date"],
  "additionalProperties": false
}
```

This keeps the manifest easy for coding agents to generate and easier for Atlas to turn into robust tool calls.

## Example action

```json theme={null}
{
  "name": "lookup_customer",
  "title": "Lookup Customer",
  "description": "Return a compact customer profile from the internal CRM.",
  "executionMode": "sync",
  "inputSchema": {
    "type": "object",
    "properties": {
      "email": { "type": "string" }
    },
    "required": ["email"],
    "additionalProperties": false
  },
  "requiresApproval": false,
  "sideEffectLevel": "read",
  "idempotent": true
}
```
