# Quickstart (/docs/quickstart)



<Steps>
  <Step>
    ### Scaffold a starter source file [#scaffold-a-starter-source-file]

    ```bash
    npx actio-cli init ci.actio.yml
    ```
  </Step>

  <Step>
    ### Compile to workflows [#compile-to-workflows]

    Turns `*.actio.yml` into `.github/workflows/*.yml`.

    ```bash
    npx actio-cli build
    ```
  </Step>

  <Step>
    ### Drift-check in CI [#drift-check-in-ci]

    Fails if the generated output is stale.

    ```bash
    npx actio-cli check
    ```
  </Step>
</Steps>

## Recommended layout [#recommended-layout]

Keep sources in `.github/actio/` and compile them into `.github/workflows/` — the
only directory GitHub reads. Sources can live anywhere and still get picked up, so
this is just convention. Treat `.github/workflows/` as your `dist`:

<Files>
  <Folder name=".github">
    <Folder name="actio">
      <File name="ci.actio.yml" />

      <File name="actio.config.ts" />
    </Folder>

    <Folder name="workflows" className="text-fd-primary! bg-fd-primary/10!">
      <File name="ci.yml" />
    </Folder>
  </Folder>
</Files>

`actio/` holds your hand-written source; the highlighted `workflows/` holds the
generated YAML — the only thing GitHub runs. Commit both.

<Callout type="info">
  Commit the generated `.yml`. GitHub runs what's in `.github/workflows/`, and
  [`actio check`](/docs/cli) keeps them in sync with your sources in CI.
</Callout>


## Sitemap

Browse the full documentation: [Markdown sitemap](https://austenstone.github.io/actio/sitemap.md) · [XML sitemap](https://austenstone.github.io/actio/sitemap.xml)