Skip to main content
Coda is a code companion that lives in Slack. Coding agents help us write code faster, but most engineering work is understanding how things work, reviewing PRs, figuring out what broke and why, triaging the backlog, and deciding what’s safe to change. That work happens in Slack and GitHub, not in an editor. Coda fills that gap. It answers architecture questions like “how does auth work” or “where is the model API call”. It reviews PRs and open branches, diffs them against your conventions, and leaves comments. It reads open issues and flags the urgent ones worth tackling next. And it does all of this in Slack, alongside your team. The code is public at agno-agi/coda.

How it works

Coda is a team of up to five specialist agents coordinated by a leader: Coda’s instructions direct the Coder to use git worktrees on coda/* branches and open pull requests for review. The repo-sync task updates each configured main checkout. CodingTools also exposes shell and git access, so branch protections remain the enforcement point for protected branches and human review. Coda runs in your infrastructure and calls the services you configure. Model prompts go to the model provider. Repository operations, diffs, and comments use GitHub. Messages and digests use Slack. The optional Researcher sends research queries to Parallel. Between them, the agents cover:

Scheduled tasks

Coda also shows up on its own. Two background tasks register at startup: Repo sync always runs. The daily digest only registers when both DIGEST_CHANNEL and SLACK_TOKEN are set in .env. Set DIGEST_CHANNEL to the Slack channel ID the summary should post to (right-click a channel in Slack, then View details to copy the ID).

Self-learning

Coda can record coding standards, conventions, and patterns for later retrieval. The learning tools come from Agno’s Learning Machines:

Run locally

The Coda README walks through this in more detail.
OPENAI_API_KEY comes from platform.openai.com. For GITHUB_ACCESS_TOKEN, create a fine-grained Personal Access Token with Contents (read and write), Pull requests (read and write), Issues (read and write), and Metadata (read). The full walkthrough is in docs/GITHUB_ACCESS.md. PARALLEL_API_KEY (from parallel.ai) is optional; it enables the Researcher agent. Without it the team runs with no web research. Tell Coda which repos to learn by editing repos.yaml:
The agno repo makes a good starting point, so you have some test questions to play around with. Then start Coda (Docker needs to be running):
Confirm it’s up at localhost:8000/docs.

Connect to the AgentOS UI

  1. Open os.agno.com and sign in.
  2. Click Connect OSLocal and enter http://localhost:8000.
This gives you a web UI to chat with Coda directly, plus sessions, traces, metrics, memory, and evaluations.

Deploy to Railway

You’ll need the Railway CLI installed and railway login completed.
railway_up.sh provisions a pgvector database, creates the coda service with the variables from your .env, deploys, and creates a public domain. If .env has no JWT_VERIFICATION_KEY, the initial process exits after the domain is created. Copy that domain, generate the key below, sync it, and redeploy. The domain can take about 5 minutes; inspect startup with railway logs --service coda. See railway.json to adjust CPU, memory, and replica settings. Production runs with RBAC on (RUNTIME_ENV=prd is the default). Without JWT_VERIFICATION_KEY, the process exits during startup. After the key is configured, protected AgentOS routes require a valid token. The operational and documentation routes /, /health, /info, /docs, /redoc, /openapi.json, and /docs/oauth2-redirect remain public.
  1. Open os.agno.com, click Connect OSLive, and enter the Railway domain created by railway_up.sh.
  2. Go to Settings and generate a key pair.
  3. Add the public key to .env as JWT_VERIFICATION_KEY (paste the full PEM block).
  4. Push it and redeploy:
railway_env.sh handles multiline values, so the PEM key syncs correctly.

Connect to Slack

With Coda running, follow the Slack setup guide to create your Slack app, then add the credentials to .env:
Restart to pick up the credentials:
There are two ways to talk to Coda: Each thread is its own conversation. Follow-ups in the same thread don’t need to @mention Coda again. If Coda is deployed, point your Slack app’s Event Subscriptions Request URL at https://<your-domain>/slack/events and wait for Slack to verify it.

Example prompts

Try these once your repos are configured:

Run evals

Five eval categories cover the team’s behavior: Evals call the real team, so set up a virtual environment and start the database first:

Source

Coda is open source at agno-agi/coda. The in-repo docs cover GitHub access and Slack setup in detail.