Skip to main content
Scout gives teams an open-source company intelligence agent for finding answers across web, Slack, Drive, wiki, CRM, and MCP sources. Company knowledge changes across systems with different search APIs and access rules. Scout navigates those live sources at request time: it searches a channel, opens a document, expands a thread, and assembles the relevant context for the answer. Agno context providers give each source its own sub-agent and expose a small query or update interface to Scout. Run it locally, then ask a question that requires information from two configured sources. The code is public at agno-agi/scout.

Run locally

You need Docker Desktop installed and running.
Scout is now running at http://localhost:8000. The Scout README has the full walkthrough.

Chat with Scout

  1. Open os.agno.com and log in.
  2. Click Connect OS, choose Local, enter http://localhost:8000, then Connect.
  3. Try the pre-configured prompts.

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.
Configuring Slack currently exposes both query_slack and update_slack. The Slack interface needs chat:write to reply, so removing write scopes does not provide a practical boundary. Set write=False on SlackContextProvider in scout/contexts.py before connecting a workspace that should remain read-only.
Setup for each provider is covered in the Scout README’s 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. 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 in the README for how both systems work.

Deploy to Railway

Scout runs on any cloud provider. We provide scripts for Railway. Prerequisites: Railway CLI installed and railway login run.
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.
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, click Connect OSLive, 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.
For production, swap the knowledge wiki to a Git-backed repo so pages survive container restarts. The README’s 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.
  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.

Run evals

Scout ships three eval tiers. PostgreSQL must be running for every tier: docker compose up -d scout-db. Run a single case with python -m evals --case <id>. See EVALS.md for the full picture.

Source

The GitHub repo has the full provider setup guides under docs/ and implementation notes in AGENTS.md.