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

# CLI

> Referencia del subcomando jelou functions dentro del CLI unificado de Jelou: desarrollo local, despliegue, secrets, tokens, cron y logs de funciones.

El CLI de Functions forma parte del **[CLI unificado de Jelou](/guides/cli)**
(`@jelou/cli`). Los comandos de funciones viven bajo el namespace
`jelou functions …` (por ejemplo `jelou functions deploy`), mientras que la
autenticación y los perfiles se comparten con el resto de la plataforma.

<Note>
  ¿Recién empiezas con el CLI? Revisa primero la
  [introducción al CLI de Jelou](/guides/cli), la
  [autenticación](/guides/cli/autenticacion) y las
  [skills para editores de IA](/guides/cli/skills). Esta página documenta en
  detalle el grupo `jelou functions`.
</Note>

## Instalación

```bash theme={null}
npm install -g @jelou/cli
```

Verifica:

```bash theme={null}
jelou --version
```

## Autenticación

La autenticación es global del CLI (no específica de funciones). Resumen rápido;
detalles en [Autenticación y perfiles](/guides/cli/autenticacion).

```bash theme={null}
jelou login                 # interactivo
jelou login --token $JELOU_TOKEN  # no interactivo (CI)
jelou whoami                # identidad actual
jelou logout                # olvida el perfil activo
```

En CI, pasa el token por variable de entorno:

```bash theme={null}
export JELOU_TOKEN=${{ secrets.JELOU_TOKEN }}
```

## Proyectos

### `jelou functions init`

Inicializa un proyecto de Jelou Functions.

```bash theme={null}
jelou functions init
# ? What is your function name? mi-funcion
# ? Add a description? Consulta de clientes
# ✓ Created mi-funcion
```

| Flag                    | Descripción                                         |
| ----------------------- | --------------------------------------------------- |
| `--slug <slug>`         | Nombre de la función                                |
| `--description <desc>`  | Descripción                                         |
| `--mode <create\|link>` | Crear una función nueva o enlazar con una existente |
| `--force`               | Sobrescribir `jelou.json` existente                 |

Genera: `index.ts`, `jelou.json`, `deno.json`, `.env`, `.gitignore`.

```bash theme={null}
# CI: crear una función nueva
jelou functions init --slug mi-funcion --mode create --no-input

# CI: enlazar con una función existente
jelou functions init --slug funcion-existente --mode link --no-input
```

### `jelou functions dev`

Inicia el servidor de desarrollo local con hot reload.

```bash theme={null}
jelou functions dev
# ▸ Function     mi-funcion
# ▸ Port         3000
# ▸ Routes       http://localhost:3000
# ▸ Health       http://localhost:3000/__health
# ▸ MCP          http://localhost:3000/mcp
```

| Flag                 | Descripción                      |
| -------------------- | -------------------------------- |
| `--port <number>`    | Puerto (default: 3000)           |
| `--env <path>`       | Ruta al archivo `.env`           |
| `--no-watch`         | Desactivar hot reload            |
| `--local-sdk <path>` | Ruta al directorio del SDK local |

<Tip>
  El servidor detecta automáticamente si tu función usa `define()` o `app()` y
  muestra las rutas correspondientes.
</Tip>

Para probar [ejecuciones diferidas](/guides/functions/diferidas) en local, arranca
con `JELOU_FN_DEFER_DEV=1`.

### `jelou functions check`

Valida el proyecto antes de desplegar. No necesita autenticación ni red.

```bash theme={null}
jelou functions check
# ✓ index.ts             entrypoint válido
# ✓ deno.json            JSON plano
# ⚠ package.json         entrada @jelou/* de npm — usa el import map de deno.json
# ✓ Sin problemas bloqueantes
```

Detecta lo que haría fallar el arranque de tu función en producción y avisa sobre
configuraciones dudosas. Termina con error si encuentra algo bloqueante.

<Tip>
  Ejecútalo antes de `deploy` en tus pipelines de CI: detecta los problemas sin
  gastar un despliegue.
</Tip>

## Despliegue

### `jelou functions deploy`

Despliega a producción.

```bash theme={null}
jelou functions deploy
# ▸ Files: index.ts (1.2 KB), jelou.json (98 B), deno.json (65 B)
# ? Deploy mi-funcion? (Y/n) y
# ✓ Deployed
# ▸ URL: https://mi-funcion.fn.jelou.ai
```

| Flag             | Descripción                            |
| ---------------- | -------------------------------------- |
| `--no-confirm`   | Omitir confirmación (para CI)          |
| `--follow`, `-f` | Streaming de logs después del deploy   |
| `--no-wait`      | No esperar a que el deploy quede listo |
| `--dry-run`      | Mostrar qué se subiría sin desplegar   |

El primer deploy genera automáticamente un runtime token.

### `jelou functions rollback [slug] [id]`

Revierte a un despliegue anterior.

```bash theme={null}
jelou functions rollback                          # interactivo
jelou functions rollback mi-funcion dep_abc12345  # directo
```

### `jelou functions deployments list [slug]`

Lista el historial de despliegues.

```bash theme={null}
jelou functions deployments list mi-funcion
# ▸ ID             Status   Source   Files  Deployed By    Age
# ▸ dep_abc123..   active   cli      3      alex@jelou.ai  2h ago
```

```bash theme={null}
jelou functions deployments info mi-funcion dep_abc123
jelou functions deployments download mi-funcion dep_abc123 -o artifact.tar.gz
```

### `jelou functions deployments build [slug] [id]`

Muestra el log de compilación de un despliegue — responde "¿por qué falló el
deploy que acabo de hacer?". Sin argumentos usa el despliegue más reciente del
proyecto actual.

```bash theme={null}
jelou functions deployments build
# ▸ Status  failed
# ✗ index.ts:14:3 — Property 'telefono' does not exist on type ...
```

| Flag    | Descripción                                              |
| ------- | -------------------------------------------------------- |
| `--all` | Mostrar todas las líneas, no solo errores y advertencias |

<Note>
  Este es el log de **compilación**. Para los logs de ejecución de la función usa
  `jelou functions logs`.
</Note>

## Funciones

### `jelou functions list`

Lista todas las funciones.

```bash theme={null}
jelou functions list
# ▸ Slug               Status   URL                                    Updated
# ▸ consultar-cliente   active   https://consultar-cliente.fn.jelou.ai  4/7/2026
```

### `jelou functions info <slug>`

Muestra detalles de una función.

```bash theme={null}
jelou functions info consultar-cliente
```

### `jelou functions create`

Crea una función remota (sin código local).

```bash theme={null}
jelou functions create --slug mi-api --name "Mi API"
```

### `jelou functions delete <slug>`

Elimina una función. Requiere confirmación (`-y` para omitirla en CI).

```bash theme={null}
jelou functions delete mi-funcion
# ? Delete function "mi-funcion"? This cannot be undone. (y/N)
```

## Secrets

Secrets a nivel de **función**. Para secrets de toda la organización, usa
`jelou secret` — ver [Secrets de organización](/guides/cli/secret).

### `jelou functions secrets list <slug>`

```bash theme={null}
jelou functions secrets list mi-funcion
# ▸ Key              Updated
# ▸ CRM_API_KEY      2 hours ago
```

### `jelou functions secrets set <slug>`

```bash theme={null}
jelou functions secrets set mi-funcion CRM_API_KEY=sk_test_123 DB_URL=postgres://...
jelou functions secrets set mi-funcion --from-env .env.production

# Un solo secret leyendo el valor de un archivo
jelou functions secrets set mi-funcion PRIVATE_KEY --from-file key.pem
```

<Note>
  Los valores nuevos toman efecto en el **siguiente despliegue**. Ejecuta
  `jelou functions deploy` para aplicarlos.
</Note>

### `jelou functions secrets delete <slug> <key>`

```bash theme={null}
jelou functions secrets delete mi-funcion CRM_API_KEY
```

## Tokens

Runtime tokens: los bearers (`X-Jelou-Token` / `Authorization: Bearer`) que usan
los clientes externos para invocar las rutas de una función. El deploy
auto-genera uno la primera vez.

### `jelou functions tokens list [slug]`

```bash theme={null}
jelou functions tokens list mi-funcion
# ▸ Name       Prefix          Last Used              Created
# ▸ default    jfn_rt_abc1..   4/7/2026, 10:30 AM     4/1/2026
```

### `jelou functions tokens create [slug]`

Genera un nuevo runtime token para una función. El token completo se muestra
una sola vez en stdout — guárdalo de inmediato, porque a partir de ahí
`tokens list` solo muestra un prefijo censurado.

```bash theme={null}
jelou functions tokens create mi-funcion --name ci-deploy
# ✓ Token created
# ▸ Token   jfn_rt_abc123def456...   (guárdalo ahora, no vuelve a mostrarse)
```

```bash theme={null}
jelou functions tokens create   # interactivo: pide slug y nombre
```

| Flag            | Descripción      |
| --------------- | ---------------- |
| `--name <name>` | Nombre del token |

<Tip>
  Crea tokens adicionales para separar credenciales por entorno o integración
  (por ejemplo uno para CI y otro para un partner externo) sin tocar el token
  que generó el primer `deploy`.
</Tip>

### `jelou functions tokens revoke <slug> <token-id>`

Revoca un runtime token existente.

```bash theme={null}
jelou functions tokens revoke mi-funcion token-uuid-123 -y
```

## Logs

### `jelou functions logs [slug]`

```bash theme={null}
jelou functions logs mi-funcion              # streaming en vivo (default)
jelou functions logs mi-funcion --history    # logs históricos
jelou functions logs mi-funcion -f           # alias de streaming
```

| Flag                          | Descripción                                                    |
| ----------------------------- | -------------------------------------------------------------- |
| `--history`                   | Logs históricos en vez de streaming                            |
| `--follow`, `-f`              | Streaming en vivo (default)                                    |
| `--limit <n>`                 | Máximo de entradas a devolver                                  |
| `--since <t>` / `--until <t>` | Rango temporal en ISO 8601                                     |
| `--order <asc\|desc>`         | `asc` (default, más antiguos primero) o `desc` (más recientes) |
| `--cursor <cursor>`           | Cursor de paginación de una consulta anterior                  |

```bash theme={null}
# Últimas 100 entradas
jelou functions logs mi-funcion --history --limit 100

# Solo lo de la última hora
jelou functions logs mi-funcion --history --since 2026-08-03T14:00:00Z
```

<Note>
  No confundir con `jelou logs` (sin `functions`), que accede a los logs de
  conversaciones de producción de un bot — ver
  [Workflows y pruebas](/guides/cli/workflows).
</Note>

## Cron

### `jelou functions cron list [slug]`

```bash theme={null}
jelou functions cron list mi-funcion
# ▸ Tool       Expression   Timezone             Last Triggered
# ▸ default    0 9 * * *    America/Guayaquil    2 hours ago
```

```bash theme={null}
jelou functions cron logs mi-funcion
jelou functions cron logs mi-funcion --state ERROR
```

| Flag                | Descripción                                     |
| ------------------- | ----------------------------------------------- |
| `--state <state>`   | Filtrar por estado (`DELIVERED`, `ERROR`, etc.) |
| `--cursor <cursor>` | Cursor de paginación de una consulta anterior   |

```bash theme={null}
# Página siguiente del historial de cron
jelou functions cron logs mi-funcion --cursor eyJpZCI6MTIzfQ==
```

## Diferidas

Consulta las [ejecuciones diferidas](/guides/functions/diferidas) que tu función
tiene agendadas. Las reservas se crean desde el código o por cabeceras HTTP, no
desde el CLI.

### `jelou functions defer list [slug]`

```bash theme={null}
jelou functions defer list mi-funcion
# ▸ ID                Status      Scheduled At           Key
# ▸ dinv_01ksqbvy..   scheduled   4/8/2026, 9:00:00 AM   carrito:42:c-9
# ▸ dinv_01ksqcxz..   firing      4/7/2026, 6:00:00 PM   recordatorio:user-7
```

Por defecto muestra las reservas activas (`scheduled`, `firing`,
`cancel_requested`).

| Flag                  | Descripción                                                               |
| --------------------- | ------------------------------------------------------------------------- |
| `--status <estado>`   | `active` (default), `scheduled`, `firing`, `fired`, `cancelled`, `failed` |
| `--key <key>`         | Filtrar por etiqueta exacta                                               |
| `--subject <subject>` | Filtrar por audiencia (normalmente el ID de usuario)                      |
| `--limit <n>`         | Máximo de filas (1-100)                                                   |

```bash theme={null}
# Las que fallaron
jelou functions defer list mi-funcion --status failed

# Las de un usuario
jelou functions defer list mi-funcion --subject user_42
```

### `jelou functions defer get <id>`

Muestra el detalle de una reserva, incluido el último error si falló.

```bash theme={null}
jelou functions defer get dinv_01ksqbvyqpe0prt91exc97mh4n
```

| Flag            | Descripción                                 |
| --------------- | ------------------------------------------- |
| `--slug <slug>` | Función. Por defecto la del proyecto actual |
| `--payload`     | Incluir el cuerpo del payload en la salida  |

## Skills para editores de IA

El antiguo `jelou skill install` se unificó en `jelou agent install`, que
instala las skills de toda la plataforma (incluida `jelou-functions`) en tus
editores de IA.

```bash theme={null}
jelou agent install                 # interactivo
jelou agent install --global        # global (todos los proyectos)
jelou agent install --only functions
```

Detalles en [Skills para editores de IA](/guides/cli/skills).

## Flags globales

| Flag               | Descripción                                                  |
| ------------------ | ------------------------------------------------------------ |
| `--json`           | Output JSON a stdout                                         |
| `--agent`          | Modo agente (implica `--json --no-input --compact NO_COLOR`) |
| `--compact`        | JSON sin espacios                                            |
| `--human`          | Forzar salida legible aunque stdout esté redirigido          |
| `--no-input`       | Desactivar prompts interactivos                              |
| `--describe`       | Emite el esquema del comando como JSON, sin ejecutarlo       |
| `--profile <name>` | Usar un perfil específico                                    |

Referencia completa de flags, modos y exit codes en
[Referencia del CLI](/guides/cli/referencia).

## Variables de entorno

| Variable         | Descripción                                                 |
| ---------------- | ----------------------------------------------------------- |
| `JELOU_TOKEN`    | Token de autenticación (sin necesidad de `jelou login`)     |
| `JELOU_NO_INPUT` | `1` para modo no interactivo                                |
| `CI`             | `true` para modo no interactivo (detectado automáticamente) |
| `JELOU_PROFILE`  | Perfil por defecto                                          |

<Tip>
  En pipelines de CI, usa `JELOU_TOKEN` como variable de entorno y `--json` para
  output parseable:

  ```bash theme={null}
  export JELOU_TOKEN=${{ secrets.JELOU_TOKEN }}
  jelou functions deploy --no-confirm --json | jq -r '.data.url'
  ```
</Tip>
