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

# Getting started

> Set up Trunk, add Dynamic CI to your CI provider, then turn on enforcement.

<Warning>
  Dynamic CI is in **private beta**, and your organization has to be enabled for
  it first. Reach out on [Slack](https://slack.trunk.io).
</Warning>

<Steps>
  <Step title="Set up Trunk CI">
    Dynamic CI decides from your CI history, so Trunk has to be collecting it.
    Follow [Set up Trunk CI](/ci/get-started) for your provider, then copy your
    organization's **API Token** from
    [Settings → Organization → General](https://app.trunk.io/settings/organization/general).
  </Step>

  <Step title="Add Dynamic CI to your CI">
    <Columns cols={2}>
      <Card title="GitHub Actions" icon="github" href="/ci/dynamic-ci/getting-started/github-actions" cta="Set up">
        Add a filter job to your workflow.
      </Card>

      <Card title="Buildkite" icon="https://mintcdn.com/trunk-4cab4936/I-5KiU2UEwbzi3fj/assets/icons/buildkite.svg?fit=max&auto=format&n=I-5KiU2UEwbzi3fj&q=85&s=b8cd4bdf067af9a69682317ccd00c42b" href="/ci/dynamic-ci/getting-started/buildkite" cta="Set up" width="256" height="256" data-path="assets/icons/buildkite.svg">
        Add the plugin to your pipeline upload.
      </Card>
    </Columns>

    Your repository starts in **Learning** mode: Trunk records a verdict for
    every job and skips nothing.
  </Step>

  <Step title="Turn on enforcement">
    When the recommendations look right, open
    [Dynamic CI](https://app.trunk.io/dynamic-ci) in the Trunk app, select your
    repository, and set the **Dynamic CI mode** to **Enforced**. Only an
    organization admin can change it.
  </Step>
</Steps>
