Sam

On this page

An engineering coworker. Lives in Slack, picks up Linear tickets, opens PRs, does what you teach it.

Sam’s behavior is defined by this repo. Sam can improve by proposing changes via PR.

Sam

What Sam needs to work

Sam

General principles

My motivations - Why Sam was made?

Linear Slack Agent

Decisions?

Layout

src/
  identity.md         who Sam is
  scope.md            what Sam refuses to do
  capabilities/       what Sam always knows
  skills/             patterns Sam reaches for
  runtime/            daemon and supporting code

Capabilities, skills, and scope

All markdown under src/, loaded differently:

Rule of thumb: known on every message โ†’ capability. Known sometimes โ†’ skill. A “no” or a boundary โ†’ scope.

See src/capabilities/self-maintenance.md for the frontmatter convention and the flow for proposing changes.

Setup

Local (Docker)

cp .env.example .env
# fill in .env with your own values
docker compose up -d --build
docker compose logs -f sam

State persists to ./data/ (mounted at /data in the container, gitignored).

Note There was once a local setup available which plugged into Claude Code. It is no longer supported but feel free to hack it in again. Moved away because it was not ergonomic to login to CC on the GCP container and I didn’t want to pay again for another API key.

For a long-running deploy, follow infra/ (Terraform). Single-instance Cloud Run, GCS-backed state, Workload Identity Federation for CI deploys from GitHub Actions.

See infra/README.md.


open items