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

# Variables

> Declare repoFullName, githubConnection, and apply-time {{ $name }} substitution for imported content.

Declare `variables:` on the entry agent file; substitution applies to **imported content only** (`{{ $name }}` tokens in fragments and templates), never to the declaring file's own body.

* **Declare `repoFullName` and `githubConnection` explicitly, even though GitHub Sync injects both** as context variables from the sync binding. Declared values win the merge, so the file applies identically from Sync and in a dry-run — this is the convention every managed-template import in this repo follows.
* **Use the literal connection name for providers Sync can't infer.** There is no Slack context variable; the house convention is a connection literally named `slack`.
* **Names are `[A-Za-z_][A-Za-z0-9_]*`; values are strings** (numbers and booleans are coerced). With any variables in scope, every `{{ $name }}` in imported content must resolve or the compile fails naming the variable and the available names — there are no silent blanks in this dialect.
* **Don't confuse the dialects.** `{{ $name }}` resolves at apply time; `{{message.text}}` resolves at runtime against the event. The `$` prefix is the discriminator, and no escaping is ever needed.

See [variables and templating](/reference/variables-and-templating) for the full grammar, and [templates](/concepts/templates) for how variables pair with managed imports.
