In this quickstart, you install Kumoss on one machine with Docker Compose, using the bundled stack as shipped, and open the running web application.
Prerequisites
Before you begin, make sure you meet the prerequisites.
Step by step
1. Clone the repository and create the environment files
git clone https://github.com/InditexTech/kumoss.git
cd kumoss
cp core/env.sample core/.env
cp services/iac/env.sample services/iac/.env
Each env.sample documents its own variables and is the source of truth
for their names. Every .env file is gitignored; never commit one.
2. Write config.yaml
config.yaml at the repository root is the single configuration file. It
is baked into the core image at build time, so every edit needs
docker compose build core.
What to Edit vs. Keep as Default
-
Must Modify / Verify:
-
llm.model: set your primary LLM provider model string. -
llm.small_model: set your lightweight model string.
-
The llm values below are only an example: replace both model strings with
the models you prefer. Model strings per provider:
LLM providers and models.
llm:
model: "vertex_ai/claude-sonnet-5-5"
small_model: "vertex_ai/gemini-3.8-flash"
-
Optional / Conditional:
-
git.provider: only modify if you are using GitLab ("GITLAB") or Azure DevOps ("AZURE_DEVOPS"). Defaults to"GITHUB". Accepted values and the supported hosts:gitconfiguration.
-
git:
provider: "GITHUB" # or "AZURE_DEVOPS", "GITLAB"
-
Keep as Default:
-
All unmentioned configuration fields automatically fall back to core code defaults.
-
3. Fill in core/.env
The core/.env passes mandatory runtime secrets such as LLM API keys and Git access tokens. The core will not run without them.
every .env file is gitignored by default. Never commit a .env file containing real credentials to version control.
|
What to Edit vs. Keep as Default
-
Variables you MUST set:
-
LLM provider credentials: set the specific API key or authentication variables required by LiteLLM for the provider prefixes configured in
llm.modelandllm.small_model. See examples below. For more info see provider credential variables. -
GIT_USER,GIT_TOKEN: the account username and personal access token for the provider named bygit.providerdefined inconfig.yaml. See examples below.
-
-
Variables to Keep as Default:
-
All other sample values in
core/env.sample: leave all pre-populated values intact (such as internal tokens, container URLs, and service connection details). These are pre-configured to match the bundled Docker Compose setup. For a complete reference of every variable, see environment variables and secrets.
-
if you modify core/.env after the stack is already running, recreate the container using docker compose up -d core to apply changes. Running docker compose restart will not reload .env variables.
|
Brief core/.env examples
Anthropic example:
ANTHROPIC_API_KEY="sk-ant-xxxxxxxxxxxxxxxxxxxxxxxx"
Google Vertex AI example::
VERTEXAI_PROJECT="your-gcp-project-id"
VERTEXAI_LOCATION="us-central1"
VERTEXAI_CREDENTIALS='{"type": "service_account", "project_id": "my-project", ...}'
Azure OpenAI example:
AZURE_API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
AZURE_API_BASE="https://your-resource.openai.azure.com"
AZURE_API_VERSION="2025-01-01-preview"
Git Credentials example:
GIT_USER="your-git-username"
GIT_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxxxxxx"
4. Fill in services/iac/.env
The services/iac/.env file passes your cloud provider access keys and execution engine settings directly to the IaC sidecar.
missing or invalid cloud credentials in services/iac/.env do not stop the container. The engine runs anyway, but authentication errors will appear inside the session as a failed init, plan, or apply operation.
|
What to Edit vs. Keep as Default
-
Variables you MUST set:
-
Cloud provider credentials: set the specific authentication variables required by your OpenTofu or Terraform providers. See terraform providers for the minimum set per cloud and authentication method.
-
-
Optional / Conditional Settings:
-
IAC_BINARY: the sidecar runs OpenTofu 1.12.6 by default. SetIAC_BINARY=terraformonly if you explicitly want to use the bundled HashiCorp Terraform 1.16.0 instead (selecting Terraform makes your use subject to its BUSL-1.1 license).
-
-
Variables to Keep as Default:
-
Internal service settings (e.g.,
KUMOSS_IAC_TOKEN): leave these pre-populated values intact so they remain synchronized withcore/.envand the container stack.
-
recreate the sidecar using docker compose up -d iac whenever you update services/iac/.env.
|
Brief services/iac/.env examples
AWS Credentials Example:
AWS_ACCESS_KEY_ID="AKIAXXXXXXXXXXXXXXXX"
AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
AWS_REGION="us-east-1"
GCP Credentials Example:
GOOGLE_CREDENTIALS='{"type": "service_account", "project_id": "my-project", ...}'
Azure Credentials Example:
ARM_CLIENT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
ARM_CLIENT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ARM_TENANT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
5. Build and start Kumoss
docker compose up --build
Add -d to run in the background. The first build downloads the base
images, installs the Python dependencies, downloads both IaC engines, and
compiles the web application.
After a later change to config.yaml, rebuild and restart the core:
docker compose build core
docker compose up -d core
A change to a .env file needs the affected container recreated
(docker compose up -d core, docker compose up -d iac); docker compose
restart does not reload it.
6. Verify the services
docker compose ps
docker compose logs -f core
Wait for Application startup complete in the core log. Boot is strict:
if a start-up step fails, the container exits with the reason in the log.
A notifications container that has exited is expected while that
optional sidecar is unconfigured.
curl http://localhost/api/v1/auth/config
With authentication disabled this returns a JSON document with an empty
issuer_url.
Where Terraform state lives
By default, Kumoss keeps Terraform state in the bundled RustFS object
storage, in the kumoss-terraform-state bucket. Each project (repository,
cloud scope, and root-module path) gets its own state file, which starts
empty the first time Kumoss works on it. Any backend block in the
repository is ignored.
To use your own external state instead, new or already existing, in AWS S3, Azure Storage, or Google Cloud Storage, see Configure state backends.
See it working
| URL | What it serves |
|---|---|
|
Kumoss web application and the API under |
|
Phoenix: traces of every run and the prompt registry |
Port 80 serves the unauthenticated Kumoss application by default, while port 9000 exposes presigned artifact downloads, on every interface of the host. Keep the stack on a machine only you can reach. The RustFS web console is disabled; to enable it, see RustFS console.
| Use a test repository and a sandbox cloud scope for this first run. Because every project starts with empty state, a repository whose infrastructure already exists gets a plan that creates it all again. |
Open http://localhost. With authentication disabled you land directly in
the wizard as the local developer. Enter a repository your Git token can
push to, choose the cloud and scope, describe the infrastructure you need,
and follow the session. What each mode does is explained in
Guides; your sessions and the admin panel
are described in
Administer users and
locks.
Open http://localhost/monitoring/ to see the traces of the run and the
seeded prompts under Prompts. Phoenix receives prompts, plans, and
generated code in clear text and has no authentication of its own in this
stack; see Monitor with
Phoenix.
Stop or reset the stack
docker compose down # stop; named volumes are kept
docker compose down -v # stop and delete all volumes
down keeps the databases, artifacts, and workspaces, so sessions and
prompts survive a restart.
down -v deletes the session database, the artifacts, the Phoenix traces
and prompts, any in-progress workspaces, and the Terraform state kept in
RustFS.
Next steps
-
Hand the Make a request and FAQ to the people who will make requests.
-
Review and adapt the seeded prompts; they encode a generic policy, not yours: Customize prompts.
-
Try a real login flow with your identity provider: Enable authentication.
-
Learn the role model and the admin panel: Administer users and locks.
-
Decide where Terraform state should live before you point Kumoss at anything real: Configure state backends.
-
Turn on the optional sidecars — Slack notifications, resource mapping, external authorization — from
servicesand Environment variables and secrets. -
Before sharing the instance with anyone, switch to the production deployment model: Deploy to production.
Troubleshooting
-
The core exits during boot. Boot is strict and the reason is in
docker compose logs core— most often missing LLM credentials, an emptyKUMOSS_IAC_TOKENor database URL incore/.env, or Phoenix not yet reachable. The stack has no healthchecks, so a dependency that was simply slower to start leaves the core stopped rather than retrying: rundocker compose up -d coreagain. -
Every session fails at validation with a
401from the IaC sidecar.KUMOSS_IAC_TOKENdiffers betweencore/.envandservices/iac/.env. -
A
config.yamlchange has no effect. Rebuild the core image withdocker compose build core. -
planorapplyfails with a provider authentication error. The cloud credentials inservices/iac/.envare absent, invalid, or insufficient. -
planfails withpermission deniedon a file in the workspace. Theworkspacesvolume predates the current non-root containers. Rundocker compose down, thendocker run --rm -v kumoss_workspaces:/workspaces alpine chown -R 10001:10001 /workspaces, and start again. -
initfails on the state backend, or every plan wants to recreate existing resources. Troubleshooting state backends. -
Push or pull-request creation fails. Check
GIT_USER,GIT_TOKEN, thatgit.providermatches the repository host, and the token’s permissions. -
A session aborts because a prompt is missing. The prompt is absent from Phoenix or has no version tagged with the
environmentvalue. See Customize prompts. -
The browser cannot download an artifact. Port 9000 must be reachable from the browser under the host in
storage.public_endpoint_url. -
LLM calls fail although the core booted. Not every provider can be validated at boot. See LiteLLM troubleshooting.