> ## Documentation Index
> Fetch the complete documentation index at: https://agno-v2-docs-scavio-google-v2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Scout

> Company intelligence agent for teams that need answers across live web, Slack, Drive, wiki, CRM, and MCP sources.

**Scout is a company intelligence agent for teams that need answers across live web, Slack, Drive, wiki, CRM, and MCP sources.**

Scout searches the system that owns the information and assembles context at question time. It can open a document, expand a Slack thread, search the web, and follow related information across sources. Scout also maintains a wiki and CRM so useful company context becomes easier to retrieve over time.

The code is public at [agno-agi/scout](https://github.com/agno-agi/scout).

## How it works

Scout is a single agent with multiple **context providers**. Each provider exposes two natural-language tools: `query_<source>` for reads and `update_<source>` for writes, where the source supports them. This thin layer solves three problems that hit any agent with a diverse tool surface: context pollution from too many tools, degrading performance from overlapping scopes, and the main agent forgetting its job because its context is all tool quirks.

A sub-agent behind each provider owns the source's quirks. Scout sees `query_slack`. Behind it, a sub-agent knows to paginate by cursor and prefer `conversations.replies` for threads. Scout's context never sees any of that.

| Provider           | Active when                       | Tools                                                                                                                          |
| ------------------ | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **Web**            | Always on                         | `query_web`. Uses the Parallel SDK when `PARALLEL_API_KEY` is set, otherwise Parallel's free MCP server.                       |
| **Workspace**      | Always on                         | `query_workspace`. Rooted at the Scout repo, so Scout can answer questions about its own codebase.                             |
| **CRM**            | Always on                         | `query_crm`, `update_crm`. Contacts, projects, notes, follow-ups.                                                              |
| **Knowledge wiki** | Always on                         | `query_knowledge`, `update_knowledge`. Scout's prose memory.                                                                   |
| **Voice wiki**     | Always on                         | `query_voice`. A code-managed style guide for emails, Slack, X, and long-form writing.                                         |
| **Slack**          | `SLACK_BOT_TOKEN`                 | Intended to expose `query_slack` for read-only access. The pinned template also exposes `update_slack`; see the warning below. |
| **Google Drive**   | `GOOGLE_SERVICE_ACCOUNT_FILE`     | `query_gdrive`. Read-only access to files, folders, and contents.                                                              |
| **MCP**            | Registered in `scout/contexts.py` | One `query_mcp_<slug>` per server.                                                                                             |

<Warning>
  Scout intends Slack access to be read-only, but the pinned template does not pass `write=False` when it creates `SlackContextProvider`. Configuring Slack currently exposes `update_slack`. Leave write scopes ungranted until the template enforces its intended boundary.
</Warning>

Setup for each provider is covered in the Scout README's [Context Providers](https://github.com/agno-agi/scout#context-providers) section.

### Self-building knowledge

Most information Scout learns from working with you is perfect for a wiki and a CRM, so it maintains both.

| System   | Purpose                                                                |
| -------- | ---------------------------------------------------------------------- |
| **Wiki** | Scout's prose memory: pages about your company, projects, and runbooks |
| **CRM**  | People and relationships: contacts, projects, notes, follow-ups        |

Both start empty and grow with use. Mention that Josh from Anthropic shared a new RLM paper, and Scout adds Josh to the CRM, parses the paper into the wiki, and links them. See [How Scout works](https://github.com/agno-agi/scout#how-scout-works) in the README for how both systems work.

## Run locally

You need [Docker Desktop](https://docs.docker.com/desktop/) installed and running.

```bash theme={null}
git clone https://github.com/agno-agi/scout && cd scout

cp example.env .env
# set OPENAI_API_KEY in .env

docker compose up -d --build
```

Scout is now running at `http://localhost:8000`. The [Scout README](https://github.com/agno-agi/scout#quick-start) has the full walkthrough.

### Chat with Scout

1. Open [os.agno.com](https://os.agno.com) and log in.
2. Click **Add OS**, choose **Local**, enter `http://localhost:8000`, then **Connect**.
3. Try the pre-configured prompts.

## Deploy to Railway

Scout runs on any cloud provider. We provide scripts for Railway.

**Prerequisites:** [Railway CLI](https://docs.railway.app/guides/cli) installed and `railway login` run.

```bash theme={null}
cp .env .env.production
```

Edit `.env.production` if any values should differ from local, like a different Slack workspace or production-only credentials. The Railway scripts read `.env.production` first and fall back to `.env`.

```bash theme={null}
./scripts/railway/up.sh
```

The `up.sh` script provisions PostgreSQL and the `scout` service, then creates your public domain.

Your first deploy will fail. That's expected. Production endpoints require RBAC authorization by default, and without a `JWT_VERIFICATION_KEY` the app refuses to serve traffic. Scout's job is to keep your company data off the public web. To get your key:

1. Open [os.agno.com](https://os.agno.com), click **Add OS** → **Live**, and enter your Railway domain.
2. Enable **Token Based Authorization**.
3. Paste the public key into `.env.production` as `JWT_VERIFICATION_KEY` (the full PEM block, no surrounding quotes).
4. Sync the env. Railway auto-deploys when values change.

```bash theme={null}
./scripts/railway/env.sh       # sync .env.production to Railway
./scripts/railway/redeploy.sh  # push code updates after up.sh
```

For production, swap the knowledge wiki to a Git-backed repo so pages survive container restarts. The README's [Deploy to Railway](https://github.com/agno-agi/scout#deploy-to-railway) section covers that, plus connecting the repo to Railway for auto-deploys on every push.

## Connect to Slack

Scout is designed to live in Slack as your teammate. Each Slack thread becomes a session with its own context, so follow-ups in the same thread carry forward.

1. Get a public URL Slack can reach: `ngrok http 8000` locally, or your Railway domain in production.
2. Create the Slack app from the manifest in Scout's [Slack setup guide](https://github.com/agno-agi/scout/blob/main/docs/SLACK_CONNECT.md).
3. Set `SLACK_BOT_TOKEN` and `SLACK_SIGNING_SECRET` in `.env`.
4. Restart Scout with `docker compose up -d`.

Setting `SLACK_BOT_TOKEN` activates the Slack context provider. The pinned template also exposes `update_slack` as described above. Adding `SLACK_SIGNING_SECRET` enables the Slack interface so Scout can reply in your workspace.

## Example prompts

Try these once Scout is up. Each one routes to the provider that owns the answer.

| Prompt                                                 | What Scout does                                                                         |
| ------------------------------------------------------ | --------------------------------------------------------------------------------------- |
| "Find the latest benchmark numbers for model X."       | `query_web`, with cited sources                                                         |
| "Save that as a note."                                 | `update_crm` inserts into `scout.scout_notes`                                           |
| "File a runbook for incident response."                | `update_knowledge` writes a markdown page under `wiki/knowledge/runbooks/`              |
| "Track my coffee consumption: flat white, extra shot." | `update_crm` creates `scout.scout_coffee_orders` and inserts the row. Schema on demand. |
| "Draft a Slack message announcing the launch."         | `query_voice` loads the style guide, then Scout drafts in that voice                    |

## Run evals

Scout ships three eval tiers. PostgreSQL must be running for every tier: `docker compose up -d scout-db`.

| Tier           | Command                  | What it catches                                                            |
| -------------- | ------------------------ | -------------------------------------------------------------------------- |
| **Wiring**     | `python -m evals wiring` | Tool shape drift and missing schema guards. Code-level invariants, no LLM. |
| **Behavioral** | `python -m evals`        | Wrong tool choices, missing response content, forbidden tools firing.      |
| **Judges**     | `python -m evals judges` | Answer quality, LLM-scored.                                                |

Run a single case with `python -m evals --case <id>`. See [EVALS.md](https://github.com/agno-agi/scout/blob/main/docs/EVALS.md) for the full picture.

## Source

The [GitHub repo](https://github.com/agno-agi/scout) has the full provider setup guides under `docs/` and implementation notes in `AGENTS.md`.
