Quickstart

Install Steadmesh into your Kubernetes cluster from a published release, declare a small organisation, and talk to your representative in Slack. No clone needed.

Terraform downloads everything:

You get one personal representative per person, plus an engineering lead and an engineer that representatives can delegate to. Agents run Claude Code.

What you need

ItemNotes
A Kubernetes cluster and a kubeconfig context for itA CNI that enforces NetworkPolicy, because seats start only once their sandbox is verified. kind's default CNI, Calico and Cilium all qualify. You also need a default StorageClass, and about 4 CPUs and 8 GB of memory free.
Terraform 1.5+ and kubectl
A Slack appGo to api.slack.com/apps, choose Create New App → From a manifest, and paste slack-app-manifest.yaml. Create an app-level token with connections:write (xapp-…), install the app and copy the bot token (xoxb-…). Note the workspace ID (T…) and each person's member ID (U…; profile → ⋮ → Copy member ID). See Connect real services for details.
An Anthropic API keyFor the Claude Code harness.
Optional: a Linear API key and team IDLets agents create projects and issues.

Install

  1. Get the quickstart. This copies two small Terraform roots into a new directory. platform/ installs Steadmesh, and organisation/ declares your agents. They are separate stages because the organisation's provider needs the platform's CRDs to exist before it can plan.

    mkdir steadmesh && cd steadmesh
    terraform init -from-module="github.com/darcys22/steadmesh//quickstart?ref=v0.1.0"
  2. Install the platform. Set kube_context and your tokens in terraform.tfvars.

    cd platform
    cp terraform.tfvars.example terraform.tfvars
    terraform init
    terraform apply

    This creates:

    • the steadmesh-system and steadmesh namespaces;
    • Postgres;
    • the platform chart, which holds the CRDs, the controller and the platform service;
    • the credential Secrets.

    Terraform only ever uses the context you name, never your current one. The tokens are stored in this stage's Terraform state, so keep the state private.

  3. Declare your organisation. Set your Slack workspace ID and the people who get a representative.

    cd ../organisation
    cp terraform.tfvars.example terraform.tfvars
    terraform init
    terraform apply

    This stage reads the cluster, namespace, images and secret references from the platform stage's state. terraform apply returns once every seat has passed its readiness checks. The first time, that takes a few minutes while the seat images are pulled. If a check fails, the error names the condition. See Checking readiness.

  4. Talk to your representative. In Slack, open the app and send it a direct message. Your representative replies in the same DM. Try:

    • asking it to remember a preference;
    • asking it to have engineering look into something;
    • with Linear connected, asking for a project for a small task.

Watch the agents work

Set enable_console = true in platform/terraform.tfvars and apply that stage. Then open the read-only console:

kubectl --context <your-context> -n steadmesh-system port-forward deploy/steadmesh-console 8090
# then browse to http://127.0.0.1:8090

Shape your organisation

Everything about your organisation lives in organisation/:

To changeEdit
How everyone worksinstructions/culture.md
How representatives behaveinstructions/representative.md
Who has a representativehumans in terraform.tfvars. One Slack app serves them all. To chat from a terminal instead, set channel = "terminal" for that person, add their key to terminal_users in platform/terraform.tfvars, and run orgctl chat --context <your-context> --user <key>.
The teamlocal.engineering in main.tf, for example reviewer = { role = "reviewer", display_name = "Reviewer" }. Then add a route under message_routes: seats can only message along declared routes.
What agents may dogrants: a connection is usable only through a grant.

terraform plan lists the seats each change affects. Seats keep their identity, workspace and memory across applies. The tutorial explains every part of the declaration.

Upgrade or remove

Next steps