Install and try

From empty machine to first team in about ten minutes

Takt is Docker Compose: a prebuilt app image, Postgres and file storage. With internet the images come from Docker Hub. Airgapped: save them on a connected machine, load them here, then start without a pull. This page takes you through the install, the first account and what to try once you are in.

Demo — not for production. This install is for trying Takt on a laptop or in a bounded pilot. Do not run it as a production system yet.

  1. Requirements
  2. Install, step by step
  3. Airgapped
  4. What to try
  5. Microsoft sign-in, CLI and MCP
  6. Everyday commands
  7. Troubleshooting

Before you start

A laptop is enough for a trial. The same stack scales to your own servers behind a reverse proxy.

Docker

Docker with Compose v2

Docker Desktop 4.30+ (Mac, Windows) or Docker Engine 27+ (Linux). docker compose version should print v2.x. The old docker-compose with a hyphen does not work.

Machine

4 GB for Docker, 3 GB disk

Postgres, file storage and the app. amd64 and arm64; Apple Silicon works.

Network

Port 3005 free

Online: images from Docker Hub the first time. Airgapped: docker load, then docker compose --env-file .env up -d --pull never. Change the port in .env if 3005 is taken.

Install

Only Docker

No other installer. AI is optional: e-mail takt@fennister.com for a demo key. Everything else works without it.

Quick check that Docker is running:

docker --version
docker compose version

Install, step by step

Six steps. The first three are in the terminal, the rest in the browser. Nothing is saved until you finish the setup wizard.

  1. Download the install folder

    Get takt-deploy-<version>.zip from the latest release. It holds Compose files, scripts and a ready .env — no source code. Unzip and step into the folder:

    unzip takt-deploy-*.zip
    cd takt-deploy
    ls -a
    # .env  .env.example  README.md  backup-loop.sh  pg-migrate-data-dir.sh  cli/  compose.yaml  down.sh

    .env is hidden in Finder and Explorer; ls -a shows it. Which app version you get is set by TAKT_VERSION in that file. Leave it as it is.

  2. Fill in .env (optional)

    Open .env in an editor before the first start. Everything can stay as it is; these are the rows people change:

    Row Value Why
    AUTH_SECRET= output of openssl rand -base64 32 Required. Unique per install. Never change it later or everyone is signed out.
    AI_ENABLED=1 1 Turns the Takt agent on for the whole install. Without it AI is hidden everywhere, even if an organisation switches it on.
    AI_GATEWAY_API_KEY= demo key from Takt Required together with AI_ENABLED. E-mail takt@fennister.com for a demo key, then paste it right after =, no quotes. Do not share it.
    TAKT_PORT and AUTH_URL e.g. 3006 and http://localhost:3006 Only if 3005 is taken. Both must point at the same port, or sign-in will not work.

    Set AUTH_SECRET before Compose. Empty secret: Compose will not start. Want to run without AI? Leave the two AI rows empty — everything except the agent works. Demo keys only; this is not a production gateway.

  3. Start: online or airgapped

    Same stack. TAKT_VERSION in .env is the Hub tag without v. Images: mrweiland/takt:<version>, postgres:19beta3-alpine, chrislusf/seaweedfs:4.46.

    Online

    docker compose --env-file .env up -d

    Pulls the three images from Docker Hub if they are missing, starts the stack and migrates. The first download takes a minute or so. AUTH_SECRET must already be set.

    Airgapped

    On a machine with internet, same version as in the zip’s .env:

    docker pull mrweiland/takt:<version>
    docker pull postgres:19beta3-alpine
    docker pull chrislusf/seaweedfs:4.46
    docker save mrweiland/takt:<version> postgres:19beta3-alpine chrislusf/seaweedfs:4.46 \
      | gzip > takt-images.tar.gz

    Move the zip and takt-images.tar.gz to the airgapped host. There:

    gunzip -c takt-images.tar.gz | docker load
    unzip takt-deploy-*.zip
    cd takt-deploy
    docker compose --env-file .env up -d --pull never

    --pull never does not talk to Hub. The zip’s ./cli/install.sh uses the bundled binary (no GitHub download).

    You are done when all four rows show healthy or Up:

    takt-install-app-1        Up (healthy)   0.0.0.0:3005->3005/tcp
    takt-install-backup-1     Up
    takt-install-postgres-1   Up (healthy)
    takt-install-s3-1         Up (healthy)

    Then open http://localhost:3005/register. Online: run docker compose --env-file .env up -d again to start (and pull the image for your TAKT_VERSION if it is missing). Airgapped: docker load the new tar, then docker compose --env-file .env up -d --pull never. The database lives in a Docker volume between restarts.

  4. Create the first account

    On /register: name (1–80 characters), email (used to sign in) and a password of at least 8 characters. Click Create account. You are signed in straight away and land in the setup wizard. The first account becomes administrator of the organisation you create next.

    The interface follows your browser language. Force English with /en first in the address, for example http://localhost:3005/en/register; Swedish with /sv.

  5. The wizard: organisation and first team

    Four short screens on /app/new. Nothing is saved until you click Create workspace at the end, so you can go back and forth.

    1 · Organisation

    • Organisation name — free text, e.g. Northbricks AB.
    • Address — a short identifier that becomes part of the URL: localhost:3005/app/<address>. Filled in from the name. Lowercase letters, digits and hyphens, 2–40 characters.
    • AI assistant — on by default. Has no effect until the operator set AI_ENABLED and a demo key from takt@fennister.com in .env.

    2 · Sign-in

    Shows how people sign in to this installation: email and password, plus Continue with Microsoft when Entra ID is configured (see below). Nothing to choose.

    3 · First team

    • Team name — e.g. Platform. Becomes /app/<address>/teams/platform.
    • Invite people — optional, up to 50 email addresses. Whoever registers with one of them becomes a member of the organisation and the team. Takt sends no email; you share the link to /register.

    4 · Review and finish

    Read through and click Create workspace →. You land on the team board: http://localhost:3005/app/<address>/teams/<team>.

  6. Create your first work item

    On the team board or backlog: New → pick a type (epic, feature, story, task, bug, requirement) → give it a title, the only required field → save. It shows up in the first column. From here, follow the tour below.

    Invite colleagues: organisation menu → Settings → Members. Roles are Organisation admin (everything, including settings, members and backups), Member (create and edit work in their teams) and Reader (read only). The role activates when the person signs in with the same email address.

What to try once you are in

A guided tour, one feature at a time. Each card is a few minutes. Paths are relative to /app/<address>.

Teams

Board, backlog and level tabs

Move a card between columns. Open the backlog and switch the Epics / Features / Stories tabs — the same work at three altitudes. Expand a feature to see its stories.

/teams/<team> · /teams/<team>/backlog
Teams

Plan with the planning panel

Open the side panel on the backlog and drag a row onto a sprint, an initiative or a goal. The link is saved on the work item — that is what the map draws later.

/teams/<team>/backlog
Teams

Sprint stand-up

Create a sprint, plan a story into it and open the sprint board. Drag tasks between stand-up lanes, filter by person, switch to the table view.

/teams/<team>/sprint
Strategy

Goals, initiatives, ideas

Add a goal and an initiative that supports it. Rate an idea on value, effort and risk. Then open the Map and see the picture drawn from the links you just made.

/goals · /initiatives · /ideas · /map
Delivery

Deliveries

Create a delivery — a project or a service — with its own key, board and backlog. Tick the teams that work in it. Work keys read like PAW-12.

/deliveries
Organisation

Labels with colour

Add organisation labels in settings, team labels on the team. Put one on a work item and filter the board by it.

/settings?tab=labels
AI

The Takt agent

With a demo key from takt@fennister.com: press ⌘ J (or Ctrl J) to open the agent rail. Pick a skill such as Improve description, or ask it to break a feature into stories. Every change is a proposal you approve.

/settings?tab=ai for limits and usage
Operations

Status and backups

Status shows live checks for database, files, AI and backups. Backup lists the Postgres dumps Compose takes every 30 minutes (last 48 kept). Restore replaces the whole install — treat it with care in a trial.

/status · /backup

Optional: Microsoft sign-in, CLI and MCP

Both are additions to a running install. Skip them for a first look.

Now

Sign in with Microsoft Entra ID

One command after az login registers a single-tenant app and writes the three variables Takt needs. Needs the Azure CLI. Roles stay in Takt; no SAML, no directory read.

az login
./entra-oidc.sh --auth-url "$AUTH_URL" --write .env
docker compose --env-file .env up -d

Then Continue with Microsoft appears on /login. Sign-in is instance-wide, not per organisation. Users with email and password can also turn on an authenticator app under Account.

Now

CLI and MCP for editors and agents

takt is a terminal command that talks to your install over the API, and an MCP server for Cursor, Claude Desktop and other clients. macOS and Linux. The zip already holds the binary; ./cli/install.sh copies it locally (works airgapped).

./cli/install.sh
takt login --url http://localhost:3005
takt              # interactive session
takt --help

MCP config: { "command": "takt", "args": ["mcp"] }. No token in the file — it comes from takt login.

Everyday commands

Run from the takt-deploy folder.

docker compose --env-file .env up -d                 # online: start / pull if missing
docker compose --env-file .env up -d --pull never    # airgapped: local images
docker compose --env-file .env down                  # stop Takt, keep the data
docker compose --env-file .env ps                    # status
docker compose --env-file .env logs -f app           # app log

Update: unzip the new zip over the same folder (keep .env), bump TAKT_VERSION, then up -d again. Airgapped: new takt-images.tar.gz on a connected machine, docker load, then up -d --pull never.

Start over from zero — deletes all data in this install and asks you to confirm:

./down.sh --purge
docker compose --env-file .env up -d            # airgapped: add --pull never
What runs after the install
Container Image Role
takt-install-app-1 mrweiland/takt:<version> The app, on TAKT_PORT
takt-install-postgres-1 postgres:19beta3-alpine Database, reachable only inside Docker
takt-install-s3-1 chrislusf/seaweedfs:4.46 File storage for images and attachments
takt-install-backup-1 postgres:19beta3-alpine Dump every 30 minutes into the backups volume

Only TAKT_PORT is exposed on your machine. All data lives in Docker volumes named takt-install-* and survives restarts and upgrades.

Troubleshooting

Symptom What to do
docker compose version fails Docker is not running. Start Docker Desktop and try again.
manifest for mrweiland/takt:<version> not found TAKT_VERSION in .env does not exist on Docker Hub. Use it without v (0.2.0, not v0.2.0). Airgapped: the image must already be local after docker load.
pull access denied / unauthorized / Hub unreachable Airgapped: docker load first, then docker compose --env-file .env up -d --pull never. Online: Docker Hub needs no login. Run docker logout and retry; check proxy and firewall.
Sign-in loops, or “Untrusted host” AUTH_URL does not match the address in the browser (port or host). Fix it and run docker compose --env-file .env up -d again.
port is already allocated on 3005 Change TAKT_PORT and AUTH_URL together.
AI is on in the organisation but nothing shows AI_ENABLED=1 and AI_GATEWAY_API_KEY are missing in .env. Ask takt@fennister.com for a demo key, add both rows and run docker compose --env-file .env up -d.
App stays in health: starting Normal for up to a minute the first time (migrations). Check logs app if it takes longer.

Stuck? Write to takt@fennister.com and attach the output of docker compose --env-file .env logs app --tail 100.