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:
- the
darcys22/steadmeshprovider from the Terraform Registry; - the platform chart and images from
ghcr.io/darcys22/steadmesh; - the modules from GitHub.
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
| Item | Notes |
|---|---|
| A Kubernetes cluster and a kubeconfig context for it | A 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 app | Go 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 key | For the Claude Code harness. |
| Optional: a Linear API key and team ID | Lets agents create projects and issues. |
Install
-
Get the quickstart. This copies two small Terraform roots into a new directory.
platform/installs Steadmesh, andorganisation/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" -
Install the platform. Set
kube_contextand your tokens interraform.tfvars.cd platform cp terraform.tfvars.example terraform.tfvars terraform init terraform applyThis creates:
- the
steadmesh-systemandsteadmeshnamespaces; - 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.
- the
-
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 applyThis stage reads the cluster, namespace, images and secret references from the platform stage's state.
terraform applyreturns 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. -
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 change | Edit |
|---|---|
| How everyone works | instructions/culture.md |
| How representatives behave | instructions/representative.md |
| Who has a representative | humans 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 team | local.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 do | grants: 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
- Upgrade: in your copy, change every
?ref=v…,steadmesh_versionand thedarcys22/steadmeshproviderversionto the new release. Applyplatform/, thenorganisation/. - Remove: run
terraform destroyinorganisation/, then inplatform/. Destroying the platform deletes its namespaces, and with them the database.
Next steps
- Learn what each part of the declaration does in the tutorial.
- Read Operating an organisation for readiness, seat lifecycle and troubleshooting.
- Work on Steadmesh itself: Run from source.