CLI commands
Every flisk command, alias and flag on one page. Your version may differ: run flisk <command> --help to check.
Note: Services that declare a
commandneed only their own runtime (without Docker). Container stacks need Docker (Engine 25+, Compose 2.20.2+), Tilt, and Bun 1.2+ for the default generated services; on Windows, run those in WSL2 (setup).
First five minutes
curl -fsSL https://flisk.sh/install.sh | sh # install
flisk doctor # Docker, Tilt and Bun OK?
flisk project --yes # create the project
flisk resource api --type backend --stack api --yes # a Bun + Hono API
flisk resource web --type frontend --stack api --yes # a React app
flisk up api # start the stack
flisk networks # where is everything?
flisk down # stop it all
Tip: Run
fliskwith no arguments for a quick readiness check. It exits 1 if your machine is not ready.
Top 10
| You want to… | Run |
|---|---|
| Start everything | flisk up |
| Start one service and what it needs | flisk up --only orders-api |
| Clone a repository and start it | flisk up https://github.com/org/repo |
| See what is running | flisk status --tilt |
| Get the URLs | flisk networks --raw |
| Read recent logs | flisk logs -s orders-api --since 5m |
| Add a service | flisk resource <name> --type backend --yes |
| Group services | flisk stack api --resources a b --yes |
| Fix “my machine is weird” | flisk doctor |
| Fix “generated files drifted” | flisk config regenerate |
| Stop everything | flisk down |
How it fits together
A project holds resources (services). Stacks group resources so you start them together.
Install and update
curl -fsSL https://flisk.sh/install.sh | sh
flisk upgrade # alias: flisk update
flisk upgrade --dry-run # show what would change
flisk upgrade --force --yes # reinstall even if already on latest, no prompt
flisk version # aliases: flisk v, flisk -v, flisk --version
Global options
| Flag | Effect |
|---|---|
-v, --version |
Print the version |
--verbose |
Verbose output |
-h, --help |
Help. flisk help <command> works too |
flisk --doctor |
Same as flisk doctor |
Commands at a glance
| Command | Aliases | What it does |
|---|---|---|
flisk create [name] |
Pick what you are building with a few key presses and get a project that runs | |
flisk project [template] |
init |
Create or check the project’s master configs, or clone a starter |
flisk projects |
info |
Show project info and config status |
flisk import [dir] |
Import the services in a directory’s root docker-compose.yml |
|
flisk import tiltfile [path] |
Make flisk up run an existing Tiltfile without changing it |
|
flisk eject |
Write EJECTED.md describing the generated Tilt files |
|
flisk repos clone |
Clone the Git repositories listed in .flisk/project.json |
|
flisk resource [name] |
Create a resource, or register an existing one | |
flisk resources |
List resources | |
flisk stack [stack-name] |
Assign resources to a stack | |
flisk stacks |
ls |
List stacks |
flisk up [stack-name \| git-url] |
deploy |
Start services; a git URL is cloned into ./<repo> first |
flisk down |
Stop services | |
flisk status |
Show stack and service state | |
flisk logs |
Print recent logs from the running stack | |
flisk run <service> -- <command> |
Run a one-off command with the service environment (native runs use project .env, not up --env-file) |
|
flisk restart <resource> |
Restart a running Tilt resource; for native services use flisk down then flisk up |
|
flisk networks |
urls, traefik |
Show Traefik-routed URLs |
flisk open |
Open the first frontend of the project in your browser | |
flisk open --print |
Print the first ready frontend URL without launching a browser | |
flisk config <subcommand> |
Regenerate, verify, migrate or edit project config | |
flisk doctor |
Check environment readiness | |
flisk ui |
interactive |
Interactive terminal UI |
flisk os |
Start FliskOS, the local desktop app for projects and agents | |
flisk mcp |
MCP server over stdio for coding agents | |
flisk connect <host> |
Connect a coding agent to Flisk: write the flisk mcp server entry and the Flisk skills | |
flisk agent sessions <resource> |
List a running AI agent’s sessions, or inspect one session’s checkpoint | |
flisk distribute <board\|kit\|status> |
Board, listing kit and channel status for getting an app to users (local files only) | |
flisk runtime |
Inspect packaged engine and template assets | |
flisk export <subcommand> |
Write render.yaml, wrangler.toml or a standalone docker-compose.yml from service.json; never deploys or calls a cloud API |
|
flisk completion [shell] |
Shell completion scripts | |
flisk upgrade |
update |
Self-update |
flisk version |
v |
Print the version |
flisk maintainers check [file] |
Check MAINTAINERS.md |
Project
flisk create [name]
flisk create # interactive
flisk create my-app --yes # defaults, no prompts
flisk create my-app --dry-run # print the commands that would run
| Flag | Effect |
|---|---|
--starter <name> |
A ready-made starter project (see flisk project –list) |
--runtime <runtime> |
local (plain processes on your computer; default) or docker (Docker and Tilt) |
--frontend <id> |
Website framework (see flisk resource –frameworks –type frontend), or none |
--backend <id> |
API framework (see flisk resource –frameworks –type backend), or none |
--language <id> |
API language (see flisk resource –help) |
--extras <list> |
Docker runtime: extra parts, comma-separated (worker, queue:nats, database:redis…), or none |
--dry-run |
Print the commands that would run, and stop |
--start |
Install dependencies and start what was written. A local app runs with flisk up; a Docker app with flisk up app. A starter is never started here |
-y, --yes |
Skip prompts and confirmations; use defaults |
flisk project [template] (alias: flisk init)
flisk project # interactive
flisk project --yes # defaults, no prompts
flisk project --check # do master configs exist and match?
flisk project --config-file cfg.json # load project config from JSON
flisk project saas # clone a starter example
flisk project saas --path my-app # clone into my-app/
flisk project next-postgres --path myapp # Next.js + Express + Postgres with a migrator (needs Docker)
| Flag | Effect |
|---|---|
[template] |
Clone a starter instead of a blank project: restaurant, saas, erp, user-management, ecommerce, example |
--path <dir> |
Directory to clone the template into (default: the template’s repo name) |
--check |
Check that master configs exist and are in sync |
--force |
Overwrite existing configuration ⚠️ destructive |
--yes |
Non-interactive, use defaults |
--config-file <path> |
Load project config from an existing JSON file |
--no-agent-skills |
Do not write the Flisk agent skills (.claude/skills, .agents/skills) and AGENTS.md |
--json |
One JSON object on stdout. Implies --yes and --quiet |
Creates TILT_RESOURCE_DEFAULTS.star and TILT_TECH_STACK.star, among others. A new project also gets the Flisk agent skills in .claude/skills and .agents/skills and a short AGENTS.md, so a coding agent opened there knows how to build and run the app; files that already exist are left as they are. See configuration and the tech stack guide.
Project setup does not need a running Docker daemon or an installed Tilt: flisk project writes the project configuration and clones the template, then prints what to start before flisk up. flisk up still refuses to start without the local runtime.
flisk projects (alias info)
| Flag | Effect |
|---|---|
--check |
Validate configuration; exit 0 or 1. Use in CI |
--json |
Versioned JSON report |
flisk import [dir]
Read the root docker-compose.yml of a directory (default .) and write one bring-your-own service.json per Compose service. Volumes, container options (cap_add, read_only, user, …), extra published ports, network_mode: service:<name> and restart are carried over as volumes, container, extraPorts, sidecarOf and restart (flisk-import 0.5.0, see bring-your-own); values that cannot be secrets (numbers, another service’s address, ${VAR} references) go into env, the rest into secrets and the git-ignored .env (0.6.0). Other Compose file names, override files, Dockerfiles and package.json are not read, and the plan names what was not translated.
flisk import --dry-run # print the plan, write nothing
flisk import compose ./legacy --yes
| Flag | Effect |
|---|---|
--dry-run |
Print the plan and write nothing |
--yes |
Write without prompting |
--force |
Overwrite an existing service.json |
--json |
One JSON object on stdout with the files written; the importer’s output goes to stderr. Implies --yes |
See gradual adoption and adopt Flisk.
flisk import tiltfile [path]
Register an existing Tiltfile (default ./Tiltfile, or a folder that holds one) as the project’s orchestration source. It runs flisk-import tiltfile, like flisk import compose runs the Compose importer, and needs flisk-import 0.4.1 or later. It writes orchestration: { "source": "tiltfile", "path": "<path>" } to .flisk/project.json (creating it with the defaults when missing) and nothing else. It refuses a missing Tiltfile, a path inside .flisk/, a path with a quote or control character, and, without --force, a .flisk/project.json that already names an orchestration source. From then on flisk up generates a .flisk/.flisk-out/Tiltfile that only include()s yours, so Tilt runs it unchanged, from its own folder. Flisk never writes to your Tiltfile.
flisk import tiltfile --dry-run # print the plan, write nothing
flisk import tiltfile infra/Tiltfile
flisk up
| Flag | Effect |
|---|---|
--dry-run |
Print the plan and write nothing |
--yes |
Write without prompting |
--force |
Replace an orchestration source that .flisk/project.json already names |
--json |
One JSON object on stdout with the importer’s output and what it wrote; implies --yes |
flisk eject
Writes EJECTED.md describing the generated Tilt files. It copies nothing; the files stay in .flisk/.flisk-out/.
| Flag | Effect |
|---|---|
--dry-run |
List the generated files and what would be written |
--yes |
Skip the confirmation prompt |
--json |
One JSON object on stdout. Implies --yes |
See leaving Flisk.
flisk repos clone
Clones the missing service repositories configured in .flisk/project.json. Each entry of the repos array has a url, a dir relative to the project root and an optional branch. Existing directories are left untouched, and flisk up also clones missing repositories.
| Flag | Effect |
|---|---|
--json |
One JSON result object on stdout |
See layout for the repos array.
Resources
flisk resource [name]
flisk resource api --type backend --yes # Bun + Hono
flisk resource api --type backend --json # same, one JSON object on stdout
flisk resource api --type backend # asks for the framework (Hono first)
flisk resource api --type backend --framework fastify --yes
flisk resource api --type backend --language python --yes
flisk resource api --type backend --feature prisma --yes
flisk resource web --type frontend --framework vue --yes
flisk resource --frameworks # list frontend frameworks
flisk resource --type frontend --frameworks # list frontend frameworks
flisk resource --type backend --frameworks # list backend frameworks and their language
flisk resource --type backend --language python --frameworks # list backend frameworks, marking the incompatible ones
flisk resource jobs --type worker --yes
flisk resource tools --type mcp --yes
flisk resource legacy --type bring-your-own --dockerfile Dockerfile --health-path /healthz
flisk resource cache --type bring-your-own --image redis:7 --no-proxy
flisk resource old-api --path services/old-api --register-existing
| Flag | Effect |
|---|---|
-t, --type <type> |
backend (default), frontend, worker, mcp, agent, inference, bring-your-own, database, sdk. database writes only a service.json for the project’s Postgres (no port, image or code); services list its name in dependsOn |
--framework <id> |
Frontend: react (default), vue, svelte, preact, lit, solid, qwik, vanilla, tanstack-router, next (Next.js App Router, a Node server). Backend: hono (default), express, elysia, fastify, nestjs, koa, h3 |
--frameworks |
List registered frameworks for the resource type and exit (--type frontend, --type backend) |
--language <id> |
Backend language: bun (default), python, go, rust, node |
--base-path <path> |
Frontend routing base path (e.g. /storefront). Defaults to the resource name: web in stack app uses /web |
-s, --stack <stack> |
Stack to assign the resource to |
-p, --path <path> |
Custom resource directory. --resource-path is an older alias |
--register-existing |
Register an existing resource without creating templates |
-y, --yes |
No prompts, use defaults |
--port <port> |
Port (default: next free in 4000-5999) |
--feature <feature...> |
Enable a resource feature, for example prisma |
--ddd |
Domain-driven design folders and path aliases. Premium, needs FLISK_LICENSE_KEY |
--json |
One JSON object on stdout with what was created. Implies --yes. With --frameworks, the inventory as JSON |
Bring-your-own only:
| Flag | Effect |
|---|---|
--dockerfile <path> |
Dockerfile path, relative to the resource directory |
--image <name> |
Use a Docker image instead of building a Dockerfile |
--health-path <path> |
HTTP health check path (default /health) |
--no-proxy |
No Traefik route |
--restart <policy> |
Compose restart policy: no, on-failure, unless-stopped, always. Use no for one-shot jobs |
See backend languages, frontend frameworks, bring-your-own, MCP resources and data.
flisk resources
flisk resources --ports
flisk resources --stack api --type backend
flisk resources --no-stack # resources without a stack
flisk resources --json
| Flag | Effect |
|---|---|
-s, --stack <stack> |
Filter by stack |
-t, --type <type> |
Filter by type |
--no-stack |
Only resources without a stack |
--ports |
Show port assignments |
-v, --verbose |
More detail per resource |
--json |
Versioned JSON report |
Stacks
flisk stack [stack-name]
flisk stack api # pick resources interactively
flisk stack api --resources orders-api users-api --yes # scriptable
flisk stack api --resources orders-api,users-api --yes
flisk stack --list # resources without a stack
| Flag | Effect |
|---|---|
--resources <names...> |
Resources to add (comma- or space-separated) |
--list |
List resources without a stack |
--yes |
Skip the confirmation prompt |
--json |
One JSON object on stdout. Implies --yes; needs --list or a stack name with --resources |
flisk stacks (alias ls)
| Flag | Effect |
|---|---|
--services |
Include each stack’s resources |
-v, --verbose |
More detail per stack |
--json |
Versioned JSON report |
Lifecycle
flisk up [stack-name] (alias deploy)
flisk up # everything
flisk up api # one stack
flisk up api --only orders-api # one service plus its dependsOn and shared infra
flisk up --dry-run
flisk up --force # kill an existing Tilt process first
flisk up --json & # one JSON object when ready; Tilt keeps running
| Flag | Effect |
|---|---|
--only <services...> |
Start only these services, plus their dependsOn services and shared infrastructure. With a stack, names must belong to it |
--profile <names...> |
Also start the services whose profiles in service.json include one of these names; without it they are left out. A name no service declares is refused |
--env-file <path> |
Use this project env file for the run instead of .env (for example: –env-file .env.integration) |
--no-gateway |
Run without gateway routing (no Traefik). Needs "capabilities": { "gateway": false } in .flisk/project.json; regenerates .flisk/.flisk-out/ from it |
--wait |
Start the stack in the background and return once every service is healthy (exit 0), or when it fails or --wait-timeout passes (exit 1). Services with sablier.deferStart are not waited for: they stay stopped until their first request. A stack that is already running (local processes, or a Tilt started earlier) returns success without checking health. The stack keeps running; flisk down stops it |
--wait-timeout <seconds> |
With –wait: seconds to wait for a healthy stack, 1 to 21600 (default 1800) |
--dry-run |
Show what would start |
-f, --force |
Kill an existing Tilt process before starting |
--ignore-drift |
Start even if generated files differ from service.json |
--no-database |
Do not provision the shared Postgres: saves capabilities.database: false in .flisk/project.json and regenerates .flisk/.flisk-out/. Set it back to true to turn Postgres on again |
--ignore-version |
Start even if this flisk is older than minFliskVersion in .flisk/project.json |
--json |
Print one JSON object when the stack is ready or the command fails. Implies --quiet |
-q, --quiet |
Less output |
-v, --verbose |
More output |
Tip:
flisk upprints the host ports and URLs it chose. A resource namedorders-apiis served at/api/orders, because a trailing-apiis dropped.
Important:
flisk up --jsonreturns once the stack is ready, and Tilt keeps running. Run it in the background (&).
flisk down
| Flag | Effect |
|---|---|
-f, --force |
Deprecated; implies --yes |
--prune-networks |
Remove this project’s Docker networks that no container uses (the default since #3650; --no-prune-networks keeps them) |
--prune-cache [age] |
Also prune Docker build cache (shared across all projects on this machine; default age: 24h). In JSON or non-TTY mode, pass --yes to confirm; native shutdown skips pruning |
--cache-until <age> |
With –prune-cache: age filter for prune (e.g. 24h, 168h, 7d; default: 24h) |
--purge |
Also delete this project’s Docker volumes (database data), networks and images |
--project <path> |
Stop the Flisk project in that folder, from any folder |
--dry-run |
Show what would stop |
--json |
One JSON object on stdout |
-y, --yes |
Skip the cache-pruning confirmation |
-v, --verbose |
More output |
Outside a project folder and without --project, flisk down stops the Flisk project whose tilt up is running, when there is exactly one. With several running, it lists them and asks for --project.
flisk status
| Flag | Effect |
|---|---|
--stacks |
Stack information (the default) |
--resources |
All discovered resources |
--tilt |
Tilt resource status |
--unhealthy |
Only failing or pending services (says so when all are healthy) |
--strict |
Exit 1 when any service is failing or pending, or nothing is running; output is unchanged |
-v, --verbose |
More detail |
--json |
Versioned JSON report |
flisk status exits 0 whatever the services’ state. For a script, a CI step or an agent that tests $?, add --strict: it exits 1 and writes one line on stderr naming the services that are not ready, or saying nothing is running. It works with --json and --unhealthy.
flisk logs
A bounded snapshot of recent logs. It does not follow new output; for live logs, use the Tilt UI.
flisk logs
flisk logs -s orders-api users-api --tail 50
flisk logs --since 5m --json
| Flag | Effect |
|---|---|
-s, --service <names...> |
Only these services (Tilt resource names) |
--unhealthy |
Only services that are failing or still starting |
--tail <n> |
Most recent lines (default 200) |
--since <duration> |
Only logs newer than this, for example 30s, 5m, 1h |
--port <n> |
Tilt UI port (default TILT_PORT or 10350) |
--json |
One JSON object |
flisk run <service> -- <command>
Runs a one-off command (a seed script, a test-data generator, a shell, a migration status check). A container service must be running: the command runs in its container with docker exec and its environment. A local-process service (one with a command) runs it on this machine from the service folder, with the project .env, shell, its env and PORT. It does not use a file selected by flisk up --env-file, so check the environment before running seeds or migrations. In a local-process run, an image-based service runs in a plain docker run container that flisk run cannot find; use docker exec on it instead (docker ps --filter label=sh.flisk.native-root lists them). Nothing is started or restarted. The exit code is the command’s.
flisk run orders-api -- printenv DATABASE_URL
flisk run orders-api -- bun run seed
flisk run orders-api -- sh
flisk run orders-api --json -- bun run migrate:status
| Flag | Effect |
|---|---|
--json |
Run without input and print one JSON object: exitCode, stdout and stderr (the last 64 KB of each) |
flisk restart <resource>
Requires Tilt; it cannot restart native services. For those, use flisk down then flisk up.
flisk restart orders-api
flisk restart orders-api --json
| Flag | Effect |
|---|---|
--port <n> |
Tilt UI port (default: TILT_PORT or 10350) |
--json |
Output one JSON object and exit |
flisk networks (aliases urls, traefik)
| Flag | Effect |
|---|---|
-s, --stack <stack> |
Filter by stack |
--raw |
URLs only, one per line |
--json |
Versioned JSON report |
--json-legacy |
Old JSON array (deprecated) |
Configuration
flisk config regenerate --dry-run # preview changes to the 4 master files
flisk config regenerate # rewrite them from .flisk/project.json
flisk config regenerate --json # rewrite them and report each file's change as JSON
flisk config verify --json # do generated files match project.json?
flisk config explain <file> # is this file generated, and does editing it block flisk up?
flisk config migrate # move service.json files to the current schema
flisk config edit # open .flisk/project.json in $EDITOR
flisk config enable-infra monitoring
flisk config disable-infra elk
| Subcommand | Effect |
|---|---|
regenerate [--dry-run] [--json] |
Regenerate the 4 master config files from .flisk/project.json |
verify [--json] |
Check generated files match .flisk/project.json. Drift exits 1 |
migrate [--json] |
Migrate service.json files to the current schema version |
edit |
Open .flisk/project.json in $EDITOR |
enable-infra <service> [--json] |
Enable optional infrastructure: monitoring, elk, debezium, golden_image, verdaccio |
disable-infra <service> [--json] |
Disable it again |
--json on any of them prints one JSON object on stdout; see the machine-readable CLI for each shape.
Environment variables
| Variable | Effect |
|---|---|
FLISK_VERBOSE |
Set to any value to log the underlying error message when a command fails |
FLISK_PUBLIC_HOST |
Host name used in printed service URLs, for example my-project.localhost (FLISK_SERVICE_BASE_URL wins when both are set) |
FLISK_EXTENSION_PATH |
Path to a flisk checkout whose Tilt extensions the generated Tiltfile loads instead of the installed ones |
FLISK_PROJECT_NAME |
Project name that runtime/engine/scripts/debug-container.sh uses to find containers, instead of the name in .flisk/project.json |
FLISK_DOCKER_SOCKET_GID |
Group id of the Docker socket, which Traefik needs when the socket is not owned by root (default 0) |
FLISK_PREMIUM_DIAGNOSTICS |
Set to 1 to print why a premium extension (Sablier) was not fetched |
See configuration, environment, params and secrets and generated files.
Diagnostics and tooling
flisk doctor
flisk doctor
flisk doctor --no-ping # skip health pings
flisk doctor --strict --json # warnings fail, machine-readable
flisk doctor --ping-timeout 2000
| Flag | Effect |
|---|---|
--all |
Run every check and show Machine and Project sections with a summary |
--no-ping |
Skip pinging running services’ /health endpoints |
--no-gateway |
Skip gateway checks (ports 80/443) |
--no-database |
Skip the shared Postgres checks for this run |
--ping-timeout <ms> |
Per-service ping timeout (default 5000) |
--fix |
Remove this project’s unused Docker networks and leftover doctor probes (asks first) |
--scope <scope> |
With –fix: project (default) or machine, which also removes unused networks of other Flisk projects |
--dry-run |
With --fix, print the commands without running them |
-y, --yes |
With --fix, do not ask before each repair |
--strict |
Fail on warnings, such as a WSL project under /mnt/c |
--json |
Versioned JSON readiness report |
See the doctor contract and troubleshooting.
flisk runtime
| Flag | Effect |
|---|---|
--check-assets |
Check the bundled engine and template assets |
--json |
Print the result as JSON |
flisk ui (alias interactive)
| Flag | Effect |
|---|---|
--no-animations |
Disable animations |
--high-contrast |
High contrast mode |
-v, --verbose |
More output |
See UI.
flisk os
Starts FliskOS, the local desktop app for your Flisk projects, coding agents and Flisk apps. It runs the fliskos command when that is on PATH, with the current project as --project, and otherwise opens FliskOS.app (macOS, in /Applications or ~/Applications). Flisk never installs it: when neither is there, the command exits 1 and says how (npm install --global @flisk-sh/fliskos once that package is published, or npm run install:mac in a checkout of the FliskOS repository). This is not flisk ui, the terminal dashboard.
flisk os # open FliskOS on the project around this folder
flisk os --project ~/work/shop # open a given project from anywhere
flisk os --port 4300 --no-open # serve on port 4300 without opening a window
flisk os --scan-root ~/code # also look for Flisk projects under ~/code
| Flag | Effect |
|---|---|
--project <dir> |
Open this Flisk project (default: the project around the current folder; outside one, FliskOS lists the projects it finds) |
--port <port> |
Port FliskOS listens on (default: a free one) |
--no-open |
Start the server without opening a window or browser; FliskOS then stops when its stdin closes |
--scan-root <dir> |
Also look for Flisk projects under this folder; repeat it for more |
--json |
Print one JSON envelope once FliskOS is up, with its URL (which carries an access token); FliskOS keeps running |
FliskOS.app takes none of these options; flisk os names the ones it could not pass on. The command stays in the foreground and exits with the exit code of fliskos.
flisk mcp
Runs a Model Context Protocol server over stdio for coding agents. No flags. See agent hosts.
flisk connect <host>
flisk connect cursor --dry-run
flisk connect cursor
| Flag | Effect |
|---|---|
--project |
Write into this project (default) |
--global |
Write the MCP entry to the user config (Cursor and Codex only; no skills). For Claude Code, use claude mcp add --scope user flisk -- flisk mcp |
--dry-run |
Print what would be written, without changing any file |
--force |
Replace an existing, different flisk entry or edited Flisk skill |
--json |
Print the result as a JSON envelope |
flisk agent sessions <resource>
Lists the stored sessions of a running agent resource, or prints one session’s checkpoint. The resource must exist in the current Flisk project and be of type agent. The command reaches a container agent through its ingress route, and a native project’s agent directly at its localhost port. It reads the agent’s GET /sessions (or GET /session with --session-id); it does not start or restart anything.
flisk agent sessions bot # session table
flisk agent sessions bot --session-id demo # that session's checkpoint
flisk agent sessions bot --json # one JSON object on stdout
| Flag | Effect |
|---|---|
--session-id <id> |
Print that session’s checkpoint instead of the session list |
--watch |
Redraw the session list, or the checkpoint with --session-id, every 2 seconds until interrupted (Ctrl+C). A failed refresh is shown and retried |
--json |
One JSON object on stdout and exit. Cannot be combined with --watch |
Without --session-id, --json returns the rows under data.sessions; with --session-id it returns the checkpoint under data.session. With --json, listing sessions from an agent scaffolded before GET /sessions existed returns SESSION_LIST_UNSUPPORTED; --session-id <id> can still read a checkpoint. Without --json, that failure prints an error message and hints. See AI agents and the machine-readable CLI.
flisk distribute
Board, listing kit and channel status for getting an app to users. Everything is written from local files; nothing is uploaded.
| Subcommand | What it does |
|---|---|
flisk distribute board |
Print the Zachman board: six perspectives (Planner to User) by six questions, each cell read from service.json or distribution.json |
flisk distribute kit <resource> |
Write a listing kit for one resource (plugin.json, .mcp.json, server.json, listing.md) |
flisk distribute status |
Print the channel grid from distribution.json |
Each subcommand takes --json for machine-readable output. flisk distribute kit also takes --out <dir> (default distribution/<resource>), --dry-run and --force.
flisk completion [shell]
Generates tab completion for bash, zsh, fish and powershell. Without a shell argument, flisk completion uses the shell named in $SHELL when it is one of these four, and bash otherwise.
The script is generated from the CLI itself: the command names, their flags, the resource types and the framework and language choices come from the registered commands and the registries, so the four shells always suggest the same commands and flags.
| Flag | Effect |
|---|---|
[shell], -s, --shell <shell> |
bash, zsh, fish, powershell |
-o, --output <path> |
Write the script to a file instead of stdout |
--install |
Write the script to the shell’s completion folder (PowerShell: add it to your profile) and print the line to add to your shell config |
--install does not edit ~/.bashrc or ~/.zshrc. Run the shell’s setup below, then open a new terminal.
What the completions suggest
- Every command the CLI registers, with its aliases (
flisk lsforflisk stacks,flisk traefikforflisk networks). - The sub-commands of a command, for example
flisk config <TAB>(regenerate,verify,edit, …). - The flags of the command you are on, for example
flisk doctor --<TAB>. - The values of
--type: the typesflisk resourcecreates (backend,frontend,worker,mcp,agent,bring-your-own,sdk) and, forflisk resources, every type a resource can have (libraryandmigratoras well). - The values of
--frameworkand--language: the frameworks of the--typeof the command line (the frontend frameworks for--type frontend, the backend frameworks otherwise) and the backend languages. A type that accepts neither offers nothing, because the CLI rejects the flag for it. - The stacks and the resources of the current project, for
flisk up,flisk stack,flisk logs,flisk restartandflisk agent sessions, and behind the--stackand--onlyflags.
bash
flisk completion --shell bash --install
echo 'source ~/.bash_completion.d/flisk-completion.bash' >> ~/.bashrc
source ~/.bashrc
The first command writes ~/.bash_completion.d/flisk-completion.bash. The second makes new shells load it.
zsh
flisk completion --shell zsh --install
cat >> ~/.zshrc <<'EOF'
fpath+=(~/.zsh/completions)
autoload -U compinit && compinit
EOF
source ~/.zshrc
The first command writes ~/.zsh/completions/_flisk. The fpath line has to come before compinit. If your ~/.zshrc already calls compinit, add only the fpath+=(...) line above it.
fish
flisk completion --shell fish --install
This writes ~/.config/fish/completions/flisk.fish, which fish loads by itself. Open a new fish session.
PowerShell
flisk completion --shell powershell --install
This adds a block marked # FLISK-CLI-COMPLETION-START / # FLISK-CLI-COMPLETION-END to your PowerShell profile (Documents\PowerShell for PowerShell 7, Documents\WindowsPowerShell otherwise). Close and reopen PowerShell. PowerShell suggests the command names, the sub-commands, the flags of the current command, the values of --type, --framework and --language and the stacks and the resources of the current project.
Check that it works
Type flisk do and press Tab. The shell should offer doctor and down. If nothing happens, check that you opened a new terminal after the setup above.
After you upgrade
The completions are a copy of the CLI: a new command, a new flag or a new framework shows up only after the script is regenerated. Run the same --install command again after flisk upgrade:
flisk completion --shell bash --install # or zsh, fish, powershell
It overwrites the old file (PowerShell: it replaces the marked block), so the completions match the new version. Without --install, flisk completion <shell> > <file> or --output <file> writes the script wherever you want it, and you load it yourself.
flisk maintainers check [file]
Checks that MAINTAINERS.md (or [file]) lists 3 maintainers from 2 companies.
JSON output and exit codes
Commands with --json: projects, resources, stacks, status, up, down, logs, networks, doctor, runtime, agent sessions, config verify, config explain.
flisk agent sessions --watch --json is refused: it exits 1 with USAGE in the JSON envelope, not a command failure.
| Exit code | Meaning |
|---|---|
| 0 | Success (doctor allows warnings unless --strict) |
| 1 | Blocking finding or command failure |
| 2 | Invalid arguments or an unexpected internal error |
stdout holds one JSON document; diagnostics go to stderr. See machine-readable CLI.
Environment variables
| Variable | Effect |
|---|---|
FLISK_HTTP_PORT, FLISK_HTTPS_PORT, FLISK_POSTGRES_PORT |
Override the host ports Flisk picks, from the shell or the project .env (the shell wins) |
FLISK_BIND_ADDRESS |
Bind address for dev ports (default 127.0.0.1; 0.0.0.0 to test from a phone) |
TILT_PORT |
Tilt UI port (default 10350) |
FLISK_SERVICE_BASE_URL |
Base URL for doctor pings and up smoke checks (default <project>.localhost) |
FLISK_UP_READY_TIMEOUT_MS |
How long flisk up --json waits for readiness (default 15 minutes) |
FLISK_UP_FAILURE_GRACE_MS |
How long flisk up keeps waiting on a container that is running but failing its health check, such as a database on its first start, before reporting it failed (default 2 minutes) |
FLISK_ALLOW_NATIVE_WINDOWS |
Set to 1 to allow flisk up on native Windows |
FLISK_LICENSE_KEY |
Unlocks premium features such as --ddd |
FLISK_DEBUG |
Set to 1 with flisk up --verbose to include Starlark debug logs |
FLISK_BUILD_COMMIT |
Overrides the commit sha that flisk version --verbose prints |
FLISK_BUILD_INFO_PATH |
Path to the build-info file that flisk version --verbose reads instead of the bundled one |
FLISK_BUILD_INFO_FILE |
Same as FLISK_BUILD_INFO_PATH; used only when that is not set |
Project .env keys (DB_PASSWORD, DATABASE_URL, JWT_SECRET, …) are covered in environment, params and secrets.
Files Flisk writes
| Path | What it is |
|---|---|
.flisk/project.json |
Project settings. flisk config regenerate rebuilds from it |
.flisk/.flisk-out/ |
The 4 master files: Tiltfile, spec.master, TILT_RESOURCE_DEFAULTS.star, TILT_TECH_STACK.star |
services/<group>/<name>/service.json |
One per resource: type, port, stack, params, secrets. Edit this |
services/<group>/<name>/.autogenerated/ |
Docker and Tilt files generated from service.json. Don’t hand-edit them |
.env |
Generated credentials. Gitignored |
shared-platform-engineering/ |
Shared Docker helper scripts |
See generated files and layout.
Recipes
# CI gate
flisk projects --json --check && flisk config verify --json && flisk doctor --no-ping --json
# Start one service and what it needs, in the background, for an agent
flisk up --only orders-api --json > up.json &
# What is running and where?
flisk status --tilt && flisk networks --raw
# Last 5 minutes of logs from one service, as JSON
flisk logs -s orders-api --since 5m --json
# Clean shutdown, including unused networks
flisk down --prune-networks
More in recipes and CI. Found a missing flag? Open an issue. 🙌