Describe the state.
Write a role in Markdown in the web editor, or in your own editor and upload it with the CLI. The editor shows each step as you type and reports unreadable lines with their line number.
korta.Get started ↗Korta Enterprise is a self-hosted manager and web console for the Korta CLI. Plan, approve, deploy and audit Markdown roles across your servers, cloud instances and databases, on infrastructure you own.
The same korta CLI and role files work with the manager. Nothing runs without a plan, and every approval is recorded.
Every change follows the same path, whether a person or Claude wrote the role.
Write a role in Markdown in the web editor, or in your own editor and upload it with the CLI. The editor shows each step as you type and reports unreadable lines with their line number.
A plan shows what would change on each host and changes nothing. A plan expires after 24 hours or once applied, and only the newest plan for the current role can be approved.
Approval applies the plan you reviewed, a batch of hosts at a time, and stops after a failed batch. Changing a role or its labels after planning invalidates the plan.
Korta installs software natively under systemd from official repositories, with TLS, encrypted secrets and backups by default. Hosts need only SSH with root or passwordless sudo.
Roles, databases, TLS, network access rules, and pgBackRest backups to local disk or S3 with point-in-time restore.
Users, databases, TLS, IPv4 access rules, and encrypted daily dumps with binary-log point-in-time restore.
Built once, shipped to every instance, run under systemd. Health-checked rollouts roll back automatically, and apps can link to a database deployment.
A role launches instances on AWS or Google Cloud, configures them after launch, and destroys them when you ask. On AWS, networks, static IPs, load balancers and DNS names are part of the same role.
Packages, users and groups, files, services, sysctl settings, firewall ports, variables and templates. Custom scripts need an extra confirmation.
Grants pair an access level with everywhere, or with the instances whose labels match a scope. Each level includes the ones above it.
Read instances, deployments, roles, plans and operations.
Check instances, open consoles, apply deployments, and edit and plan roles.
Approve role plans, restore databases and read connection credentials.
Manage deployments, instances, SSH keys, secrets and users. Owners manage grants.
By default, nobody approves a role they last changed or planned. Turn this off with KORTA_FOUR_EYES=false for single-person teams. Users add an authenticator app, and create personal API tokens for the CLI and CI, valid for 90 days by default.
Every approval, console session and change is in the audit log. Console sessions show their opening and closing on the instance page.
Open an interactive SSH terminal from the web console. It logs in as the instance's configured SSH user, uses the stored key and pinned host key, and follows your access grants. Idle sessions close after 30 minutes, with an eight-hour maximum.
Read about console access ↗Secrets and keys never leave the manager in plain text, and plans never store the values they would use.
SSH keys and named secrets are sealed with AES-GCM under a vault key you back up. Secret values are write-only and never shown again.
Korta pins each host's key on first connection and refuses a changed key until you trust it again.
Plans store keyed hashes of compiled roles, and secret values stay out of plans, logs and operation results.
The manager runs its own CA for PostgreSQL and MySQL TLS, so database connections are encrypted without public certificates.
Describe what hosts should look like. Claude proposes a role, and Korta checks it with the same validation as a role written by hand. The assistant never applies anything.
"Patch prod weekly, one host at a time, reboot only if needed, and keep nginx running." → role saved, plan created, awaiting approval
It never sees addresses, keys or passwords. Revise an existing role the same way.
Run the manager on a server you control. Use PostgreSQL for production, with the vault key and admin token kept outside the database and the container.
export KORTA_DATABASE_URL='postgres://korta:…@db.internal/korta' export KORTA_VAULT_KEY="$(openssl rand -base64 32)" export KORTA_ADMIN_TOKEN="$(openssl rand -base64 32)" korta-server