Coda

Code companion for engineering teams that review pull requests, triage issues, and answer architecture questions in Slack.

This guide follows the reviewed application revision, which pins Agno 2.7.0. Use its checked-in requirements to reproduce the application.

Coda is a code companion for engineering teams that review pull requests, triage issues, and answer architecture questions in Slack.

Engineering teams spend a large part of the day understanding existing code, reviewing changes, triaging the backlog, and deciding what is safe to ship. Much of that coordination already happens in Slack and GitHub.

Coda brings repository context and specialist agents into those conversations. It answers architecture questions with code references, reviews changes against your conventions, triages issues, plans work, and can prepare changes in isolated worktrees for human review.

The code is public at agno-agi/coda.

How it works

Coda is a team of five specialist agents coordinated by a leader:

AgentRole
ExplorerReads repository code, answers architecture questions, and can post GitHub review comments
CoderWrites code in isolated worktrees, opens PRs
PlannerBreaks features into ordered GitHub issues
TriagerLabels, comments on, and closes issues based on code analysis
ResearcherSearches the web for docs, APIs, and error messages

The Coder works in isolated git worktrees on coda/* branches and opens pull requests for human review. Coda runs in your infrastructure and connects to the model provider, GitHub, Slack, and optional research services you configure.

Between them, the agents cover:

CapabilityWhat it does
Architecture Q&AAnswers "how does auth work" with file paths and line numbers
PR reviewsPulls the diff, checks it against your conventions, leaves inline comments
Issue triageCategorizes, labels, flags duplicates, closes junk
PlanningTurns a feature request into ordered, well-scoped GitHub issues
Web researchBrings back framework docs, library APIs, and error explanations with sources
Code writingShips changes from isolated worktrees as PRs

Scheduled tasks

Coda also shows up on its own. Two background tasks register at startup:

TaskWhat it does
Daily digestPosts a morning summary: what merged, what needs review, what went stale
Repo syncPulls the latest changes from configured repos every 5 minutes

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 uses a shared Learning Machine to keep non-obvious conventions, such as service boundaries, error-handling patterns, and naming rules, available to every specialist. Relevant learnings are added to the context for later tasks.

Run locally

The Coda README walks through this in more detail.

git clone https://github.com/agno-agi/coda.git && cd coda

cp example.env .env
# Edit .env: add OPENAI_API_KEY and GITHUB_ACCESS_TOKEN

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:

repos:
  - url: https://github.com/your-org/your-repo
    branch: main

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):

docker compose up -d --build

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.

# First-time setup (creates project, database)
./scripts/railway_up.sh

# Sync env vars after changing .env (handles multiline keys like PEM)
./scripts/railway_env.sh

# Redeploy after code changes
./scripts/railway_redeploy.sh

railway_up.sh provisions a pgvector database, creates the coda service with the variables from your .env, deploys, and creates a public domain. The domain can take about 5 minutes; check progress 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) and requires verification configuration to start:

  1. Open os.agno.com, click Connect OSLive, and enter your Railway domain.
  2. Go to Settings and generate a key pair.
  3. Add the full public key to .env as a single-quoted multiline JWT_VERIFICATION_KEY value, as shown below.
  4. Push it and redeploy:
JWT_VERIFICATION_KEY='-----BEGIN PUBLIC KEY-----
MIIBIjANBgkq...
-----END PUBLIC KEY-----'

Use the actual public key from your connection.

./scripts/railway_env.sh
./scripts/railway_redeploy.sh

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:

SLACK_TOKEN="xoxb-***"
SLACK_SIGNING_SECRET="***"

Restart to pick up the credentials:

docker compose up -d

There are two ways to talk to Coda:

WhereHow
Direct messageFind Coda under Apps in the Slack sidebar and message it directly
In a channelRun /invite @Coda, then mention @Coda in any message

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:

@Coda where is the webhook handler for Stripe events?
@Coda review PR #42
@Coda triage the open issues and label them
@Coda plan out adding webhook support to the payments service
@Coda what changed in FastAPI 0.135?

Run evals

Five eval categories cover the team's behavior:

CategoryWhat it tests
securityResponses never leak keys, tokens, or credentials
routingThe leader delegates to the right specialist and tools
explorationAnswers point to the correct files and code
synthesisAnswers lead with the result, cite file paths, and suggest next steps
refusalThe team declines dangerous requests and asks for clarification on ambiguous ones

Evals call the real team. After the local Docker setup above, run them inside coda-api so they use the configured credentials, database, and repository clones:

docker exec -it coda-api python -m evals.run
docker exec -it coda-api python -m evals.run --category security
docker exec -it coda-api python -m evals.run --verbose

Source

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