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

# Quickstart: install gtm-sdk and run your first command

> Clone gtm-sdk, install dependencies with uv, run local CLI commands, then wire credentials and a Modal deployment for the provider-backed commands.

## Prerequisites

* Python `>=3.13,<3.14`
* [`uv`](https://docs.astral.sh/uv/) — the only supported package manager (never bare `pip`)
* For provider-backed commands: a [Modal](https://modal.com/) account and either provider
  API keys or an [Infisical](https://infisical.com/) project (see
  [Secrets and API keys](/secrets))

## Get started

<Steps>
  <Step title="Clone">
    ```bash theme={"system"}
    git clone git@github.com:elviskahoro/gtm-sdk.git
    cd gtm-sdk
    ```

    Consuming the SDK from another project instead? See [Installation](/installation).
  </Step>

  <Step title="Install dependencies">
    ```bash theme={"system"}
    uv sync
    ```
  </Step>

  <Step title="Run your first command">
    The package installs a `gtm` entrypoint:

    ```bash theme={"system"}
    uv run gtm version
    ```

    ```text Output theme={"system"}
    gtm v0.1.0
    ```

    `uv run gtm --help` lists the command groups: `accounts`, `apollo`, `attio`,
    `enrichment`, `exa`, `gmail`, `granola`, `parallel`, `sanity`, and `webhook`.
  </Step>

  <Step title="Try a local command">
    Some commands run entirely on your machine — no keys, no deployment. Decode a Gmail
    web URL to its API message ID:

    ```bash theme={"system"}
    uv run gtm gmail url decode "https://mail.google.com/mail/u/0/#inbox/FMfcgzQgLPNbWJPPscDGRbsGngFwlCpq"
    ```

    ```text Output theme={"system"}
    19d89702e6cb6456
    ```
  </Step>

  <Step title="Wire credentials for provider-backed commands">
    Commands that touch external providers (Exa, Attio, Apollo, Parallel, …) execute as
    functions on **your Modal deployment** — the CLI is a thin client that invokes them by
    name. Two things make those commands work:

    1. **A deployed app.** Authenticate with Modal (`uv run modal token new`), then:

       ```bash theme={"system"}
       uv run modal deploy deploy.py
       ```

    2. **Provider keys.** Pass them per command with API-key flags, or let the deployed
       functions fetch them from Infisical at entry:

           <CodeGroup>
             ```bash API-key flags theme={"system"}
             # No Infisical required: pass the provider key directly on the command.
             # The flag rides the call to the deployed Modal function and overrides
             # the environment inside the container for that one invocation.
             uv run gtm exa search "developer-first CRM tools" --exa-api-key <YOUR_EXA_API_KEY>
             ```

             ```bash Infisical theme={"system"}
             # One-time: copy the template and fill in your Infisical credentials.
             cp .env.example .env.local

             # Once per shell: load the bootstrap credentials.
             set -a && source .env.local && set +a

             # Keys are fetched from Infisical at function entry — no per-service flags.
             infisical run --projectId "$INFISICAL_PROJECT_ID" --token "$INFISICAL_TOKEN" --env=prod -- \
               uv run gtm exa search "developer-first CRM tools"
             ```
           </CodeGroup>

    The [Secrets and API keys](/secrets) page explains the resolution order and the
    Infisical bootstrap in full.
  </Step>
</Steps>

## Quality gates

```bash theme={"system"}
trunk check --all   # lint + type check
uv run pytest       # tests (integration tests excluded by default)
```

## Next steps

<Columns cols={2}>
  <Card title="Secrets and API keys" icon="key" href="/secrets">
    Key resolution order, Infisical bootstrap, and the env-var reference.
  </Card>

  <Card title="CLI contract" icon="terminal" href="/concepts/cli-contract">
    JSON on stdout, errors on stderr, preview-by-default mutations.
  </Card>

  <Card title="Architecture" icon="layer-group" href="/concepts/architecture">
    The enforced cli → src → libs layering and where new code goes.
  </Card>

  <Card title="Telemetry" icon="chart-line" href="/telemetry/overview">
    OTEL collector fan-out to Dash0, HyperDX, Logfire, and Grafana.
  </Card>
</Columns>


## Related topics

- [gtm-sdk: Go-To-Market SDK and CLI for Modal](/index.md)
- [Installation](/installation.md)
- [Launch week — gtm-sdk goes public (July 13, 2026)](/changelog/2026-07-13.md)
- [CLI contract](/concepts/cli-contract.md)
- [Send gtm-sdk telemetry to Dash0 with the otel-collector](/telemetry/dash0-setup.md)
