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

# Quickstart

> Run the full ShoulderTap loop in your terminal in about 90 seconds using the console transport — no Slack app or credentials required.

The `console` transport prints the DM ShoulderTap would send an expert to your terminal, and reads the reply from stdin — the same loop as real Slack, with no Slack app or credentials needed for a first look.

<Info>
  **Prerequisites:** Python 3.11 or newer. No Slack, no API keys, no LLM required — without an LLM configured, ShoulderTap passes the expert's reply through verbatim instead of structuring it.
</Info>

<Steps>
  <Step title="Install and initialize">
    Install the package and generate a starter config:

    ```bash theme={null}
    pip install -e .
    shtap init          # writes shouldertap.yaml + .env.example
    ```

    `shtap init` prompts for an organization name and writes `shouldertap.yaml` (config) and `.env.example` (secret placeholders) to the current directory.
  </Step>

  <Step title="Add an expert">
    Open the `shouldertap.yaml` that was just written and add an expert under the `experts:` section:

    ```yaml theme={null}
    experts:
      - id: "U1"
        name: "Dana"
        topics: ["revenue metrics"]
    ```

    The `id` is a Slack user ID in production, but with the console transport any string works. The `topics` list is what routing matches a question's topic against.
  </Step>

  <Step title="Start the engine">
    In your first terminal, run the server with the console transport:

    ```bash theme={null}
    shtap serve --transport console
    ```

    This starts the engine, the HTTP API (default port `8776`), and the approval UI. Leave it running — this is the terminal where the DM to Dana will appear.
  </Step>

  <Step title="Ask a question">
    In a second terminal, submit a question as a consumer:

    ```bash theme={null}
    shtap ask "What does active customer mean?" --topic "revenue metrics"
    ```

    Terminal 1 now prints the DM ShoulderTap would have sent Dana on Slack — the self-identification, why it's asking, the question, and the opt-out. **Type a reply there**, for example:

    ```
    paying accounts active in 90 days
    ```

    Terminal 2 is now polling for an answer and will wait until a reviewer accepts it.
  </Step>

  <Step title="Review and accept">
    In a third terminal, see the pending proposal and accept it:

    ```bash theme={null}
    shtap queue                    # see the pending proposal
    shtap accept <proposal_id>     # copy the id from the queue output
    ```

    Terminal 2 then prints the accepted answer, attributed to Dana:

    ```
    paying accounts active in 90 days
    — answered by Dana
    ```
  </Step>
</Steps>

That's the whole loop: a consumer asked, an expert answered on a transport, a human approved, and the answer came back attributed. In production you swap the console transport for Slack and point real agents at the HTTP API, MCP server, or SDK.

## What's next

<CardGroup cols={2}>
  <Card title="Concepts" icon="book-open" href="/concepts">
    Understand requests, proposals, experts, consumers, kinds, and topics.
  </Card>

  <Card title="Configuration" icon="gear" href="/run/configuration">
    Every `shouldertap.yaml` setting, defaults, and how secrets map to `.env`.
  </Card>

  <Card title="Connect Slack" icon="slack" href="/run/slack">
    Swap the console transport for a real Slack app.
  </Card>

  <Card title="Integrate an agent" icon="robot" href="/consumers/overview">
    Tap a human expert from your own agent via MCP, the SDK, or webhooks.
  </Card>
</CardGroup>
