mcpField
T
tilt

tilt

github.com/hyperb1issCloud & DevOps3639 installsUpdated 1d ago
Repository

About tilt

This skill explains how to operate a running Tilt instance from the CLI, covering the local Kubernetes development loop, including builds, deployments, logs, and resource troubleshooting. It is for engineers using Tilt in development or CI, with guidance on configuration strategies and common issues.

Key features

  1. 01Start, stop, and configure Tilt environments
  2. 02Inspect logs and resource status
  3. 03Diagnose file watching and build issues
  4. 04Choose image build and live update strategies
  5. 05Configure Kubernetes and local resources

Use cases

  1. 01Start a local Kubernetes development environment
  2. 02Inspect build or runtime logs for a resource
  3. 03Troubleshoot unready resources or file watch problems
  4. 04Run batch verification in CI

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/hyperb1iss/hyperskills --skill tilt

After installing, type/tiltin Claude Code to confirm it loaded.

Bundled filesreferences/api-reference.mdreferences/patterns.md

Details

From the project README

Tilt: Kubernetes Dev Toolkit

Tilt automates the local Kubernetes development loop: watch files, build images, deploy to cluster. Configuration lives in a Tiltfile (Starlark, a Python dialect). A resource bundles an image build + k8s deploy (or a local command) into a single manageable unit.

CLI Operations

The commands an agent uses to interact with a running Tilt instance.

Lifecycle
TaskCommand
Start dev environmenttilt up [-- <Tiltfile args>]
Start with terminal log streamingtilt up --stream
Start specific resources onlytilt up frontend backend
Run in CI/batch mode (exits on success/failure)tilt ci --timeout 30m
Stop and delete deployed resourcestilt down
Change runtime Tiltfile argstilt args -- --flag value
Change runtime args (clear all)tilt args --clear

On Ctrl+C from tilt up: K8s and Docker Compose resources keep running. Local serve_cmd processes stop. Use tilt down to clean up.

Viewing Logs
TaskCommand
Stream all logstilt logs -f
Stream logs for one resourcetilt logs -f <resource>
Show only errorstilt logs --level error
Show build logs onlytilt logs --source build
Show runtime logs onlytilt logs --source runtime
Logs since 5 minutes agotilt logs --since 5m
Last 100 linestilt logs --tail 100
JSON output (for parsing)tilt logs --json
Resource Management
TaskCommand
List all resourcestilt get uiresources
Resource status as JSONtilt get uiresources -o json
Describe a resource in detailtilt describe uiresource <name>
Force rebuild a resourcetilt trigger <resource>
Enable a disabled resourcetilt enable <resource>
Disable a resourcetilt disable <resource>
Wait for resource readinesstilt wait --for=condition=Ready uiresource/<name>
Inspection & Debugging
TaskCommand
Diagnostics (versions, cluster)tilt doctor
Inspect file watchestilt get filewatches
Describe a specific file watchtilt describe filewatch <name>
Full engine state dump (JSON)tilt dump engine
Full UI state dumptilt dump webview
Test Docker build as Tilt wouldtilt docker -- build <args>
List API resource typestilt api-resources

The Tilt API server runs on localhost:10350 by default. All tilt get/describe/trigger commands talk to it.

Build Strategy Selector

SituationFunctionKey detail
Standard Dockerfiledocker_build(ref, context)Watches context dir, auto-injects into k8s
Custom toolchain (Bazel, ko, Buildpacks)custom_build(ref, cmd, deps)Must tag with $EXPECTED_REF env var
Non-Docker builder (Buildah, kaniko)custom_build(..., skips_local_docker=True)Builder handles push independently
Docker Compose servicesdocker_compose(configPaths)Manages compose lifecycle
Helm chartsk8s_yaml(helm('./chart'))Renders locally, deploys to cluster
Kustomize overlaysk8s_yaml(kustomize('./overlay'))Renders locally, deploys to cluster

Live Update Decision Tree

Live update replaces full image rebuilds with in-place container file syncs, seconds instead of minutes.

StepPurposeOrdering
fall_back_on(files)Force full rebuild when these files changeMust come first
sync(local, remote)Copy changed files into running containerAfter fall_back_on
run(cmd, trigger=files)Execute command in container (e.g., install deps)After sync
restart_container()Restart the container processMust come last
docker_build('myapp', '.', live_update=[
    fall_back_on(['requirements.txt']),
    sync('./src', '/app/src'),
    run('pip install -r requirements.txt', trigger=['requirements.txt']),
])

When live update breaks: Changes to files outside the docker_build context trigger a full rebuild. Changes outside any sync() path also trigger a full rebuild. First tilt up always does a full build, live update requires a running container.

Resource Configuration

# Kubernetes resource with port forwarding and dependencies
k8s_resource('frontend',
    port_forwards=['3000:3000'],
    resource_deps=['api', 'database'],
    labels=['web'],
    trigger_mode=TRIGGER_MODE_MANUAL,
)

# Local resource (build tool, test runner, code generator)
local_resource('codegen',
    cmd='make generate',
    deps=['./proto'],
    labels=['tools'],
)

# Local server (runs continuously)
local_resource('storybook',
    serve_cmd='npm run storybook',
    deps=['./src/components'],
    allow_parallel=True,
    readiness_probe=probe(http_get=http_get_action(port=6006)),
)

Parallelism: Local resources run serially by default. Set allow_parallel=True for independent resources. Image builds default to 3 concurrent, adjust with update_settings(max_parallel_updates=N).

Dependencies: resource_deps gates on first-ever readiness only, once a dependency is ready once, dependents unlock permanently for that session.

Debugging Flow

Service crashing?     → tilt logs -f <resource> --source runtime
Build failing?        → tilt logs -f <resource> --source build
                        tilt docker -- build <args>  (reproduces Tilt's exact build)
Wrong files rebuild?  → tilt get filewatches
                        tilt describe filewatch <name>
                        Check .tiltignore, watch_settings(ignore=), ignore= param
Force a rebuild?      → tilt trigger <resource>
Resource stuck?       → tilt describe uiresource <name>
                        Check resource_deps chain
                        For CRDs: pod_readiness='ignore'
General diagnostics?  → tilt doctor
Full state dump?      → tilt dump engine | jq .

Top 10 Pitfalls

PitfallFix
local() calls don't track file depsWrap with read_file() or add watch_file()
Live update paths outside docker_build contextEnsure sync local paths fall within context dir
Local resources block each otherSet allow_parallel=True on independent resources
resource_deps doesn't re-gate on updatesIt only checks first-ever readiness, not current version
Starlark has no while/try-except/class/recursionUse for loops, fail() for errors, dicts for state
.tiltignore doesn't affect Docker build contextUse .dockerignore to exclude from both rebuild triggers AND context
$EXPECTED_REF not used in custom_buildBuild script MUST tag the image with this env var
run() trigger files not in a sync() stepTrigger paths must also be covered by a sync step
First tilt up always does full buildLive update cannot work until a container is running
CRD pods stuck in pendingSet pod_readiness='ignore' on CRD resources

Additional Resources

Reference Files

For detailed API signatures and advanced patterns, consult:

  • references/api-reference.md: Complete Tiltfile API catalog organized by category, Starlark language notes, ignore mechanism comparison
  • references/patterns.md: Multi-service architectures, environment config, CI integration, performance optimization, programmatic Tilt interaction, extension ecosystem

Anti-Patterns

Anti-PatternFix
Starting or stopping Tilt without consentAsk before changing long-running dev environments
Treating tilt up as a build commandUse tilt ci for batch verification
Live update without fallbacksPut build/dependency files in fall_back_on
Debugging from Kubernetes YAML onlyInspect uiresources, file watches, and logs
Using local() for watched shell workUse local_resource with explicit deps

What This Skill is NOT

  • Not a Kubernetes primer.
  • Not permission to run, restart, or tear down a dev environment.
  • Not a substitute for reading tilt doctor and resource logs.

Comments

Markdown supported