> For the complete documentation index, see [llms.txt](https://docs.skail.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skail.dev/conceitos/readme/runtime.md).

# Runtime

O Runtime é o motor de execução durável das suas funções. É ele quem mantém as `[SkailFunction]` vivas ao longo das hibernações, delays, esperas por eventos e quedas de processo, e quem garante que cada `[SkailCommand]` execute exatamente uma vez.

Você não interage com o Runtime diretamente no código — toda a conversa entre o SDK e o Runtime acontece de forma transparente. Na prática, o Runtime é o que transforma suas classes anotadas em execuções que sobrevivem a dias, a restart de servidores e a deploys.

### O que o Runtime entrega

#### Durabilidade

Toda `[SkailFunction]` em execução tem seu estado persistido continuamente pelo Runtime. Se o processo cair, se o servidor for reiniciado, se um deploy acontecer no meio da execução, a função volta a rodar exatamente no ponto onde parou — sem código de recuperação, sem checkpoints manuais.

#### Execução exatamente uma vez

Cada `[SkailCommand]` tem seu resultado guardado pelo Runtime no momento em que conclui. Se a função for retomada depois, o comando não é executado de novo. É essa garantia que permite escrever fluxos de longa duração sem precisar manter tabelas de controle manual de idempotência.

#### Agendamento e temporização

[`Delay`](vscode-webview://0heshj46i2ojvhih6662kbtngnku76e0aibdlmuu3mqpj3oud6m9/%7Blink%7D), timeouts e retentativas se apoiam no agendador do Runtime. Uma função que espera x tempo por um evento, ou que precisa retomar num horário específico, é agendada no próprio Runtime — sem cron, sem timers em processo, sem infraestrutura adicional.

#### Roteamento de eventos

[`FireEvent` e `WaitForEvent`](vscode-webview://0heshj46i2ojvhih6662kbtngnku76e0aibdlmuu3mqpj3oud6m9/%7Blink%7D) conversam através do Runtime. Ele correlaciona cada disparo ao par `(nome do evento, instance id)` da espera correspondente e retoma a execução interessada. Quem dispara não precisa saber quem está esperando, nem o contrário.

#### Política de retry

Quando um `[SkailCommand]` falha com erro transitório, o Runtime retenta automaticamente antes de propagar a exceção para a função. Erros definitivos chegam ao código da função normalmente, como qualquer exceção em `async/await`.

### Observabilidade

Cada execução de função e cada chamada de comando aparece no [Monitor](vscode-webview://0heshj46i2ojvhih6662kbtngnku76e0aibdlmuu3mqpj3oud6m9/%7Blink%7D) do portal da skail com sua linha do tempo completa: estágios já concluídos, ponto atual, retentativas consumidas, erros registrados. Isso é nativo do Runtime — você não precisa instrumentar nada além do código das suas funções e comandos.

### Retomada manual

Execuções que falharam definitivamente ficam disponíveis no Monitor e podem ser retomadas manualmente depois que a causa-raiz for corrigida. A retomada usa o mesmo mecanismo do replay automático: comandos já concluídos retornam com seus resultados guardados; só o que ainda não tinha rodado é efetivamente executado.

### Como se posiciona no conjunto

O [SDK](vscode-webview://0heshj46i2ojvhih6662kbtngnku76e0aibdlmuu3mqpj3oud6m9/%7Blink%7D) é onde você escreve o código; o Runtime é onde ele executa.

* você publica a aplicação contendo as funções e comandos anotados com os atributos da skail;
* o Runtime passa a executá-los quando invocados, seja por sua aplicação, seja por sistemas externos;
* a persistência, a retomada, o agendamento, o casamento de eventos e a alimentação do Monitor ficam por conta dele.
