Basecamp Sherpa
AppsAgent

Production

Deploy the Agent to Railway.

The Agent Docker image is built from apps/agent/Dockerfile. See Deploy for the build & push workflow.

Railway service

  1. Create a new project on railway.com
  2. Add a service → Docker Image → ghcr.io/yannickarmspach/sherpa-agent:latest
  3. Add ghcr.io registry credentials (GitHub username + PAT with read:packages)
  4. Set the port to 3000

Environment variables

ANTHROPIC_API_KEY=sk-ant-...
CLAUDE_MODEL=claude-sonnet-4-6
QOBI_USER_ID=<your basecamp person id>

Health check

Configure the health check to GET /health — it returns "ok" when the server is ready.

Persistent volume

Mount a volume at /root to persist credentials across deploys:

PathContents
/root/.claude/Claude auth tokens and plugin cache
/root/.config/basecamp/Basecamp OAuth credentials
/root/.logs/Webhook processing logs
/root/memory.jsonProcessed webhook deduplication

Without a persistent volume, you'll need to re-authenticate Claude and Basecamp after every deployment.

Initial authentication

After the first deploy, exec into the container to authenticate:

# In the Railway container shell:
claude auth login
basecamp auth login

Domain

Generate a Railway domain or add a custom domain. This URL is where Basecamp webhooks will point.

Basecamp webhooks

Point Basecamp webhooks to the Agent's public URL:

https://your-agent-domain.railway.app/webhooks

For managed webhook delivery with retries and monitoring, use Hookdeck. Create a connection with Basecamp as the source and your Agent URL as the destination.