Learn-skills.dev tiltup
Start Tilt dev environment in tmux, monitor bootstrap to healthy state, fix Tiltfile bugs without hard-coding or fallbacks. Use when starting tilt, debugging Tiltfile errors, or bootstrapping a dev environment.
git clone https://github.com/NeverSight/learn-skills.dev
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/0xbigboss/claude-code/tiltup" ~/.claude/skills/neversight-learn-skills-dev-tiltup && rm -rf "$T"
data/skills-md/0xbigboss/claude-code/tiltup/SKILL.mdTilt Up
Principles (Always Active)
These apply whenever working with Tiltfiles, Tilt errors, or dev environment bootstrap:
Fix the Tiltfile, Not the Symptoms
- Fix the source config directly - Tiltfile, Dockerfile, k8s manifest, or helm values
- Never add shell workarounds - no wrapper scripts, no
, no|| truetry/except pass - Never hard-code ports, paths, hostnames, image tags, or container names that should be dynamic
- Never add fallbacks that mask the real error - if a resource fails, the failure must be visible
- Never add sleep/retry loops for flaky dependencies - fix dependency ordering via
orresource_deps()k8s_resource(deps=) - Never add polling for readiness that Tilt already handles - use
or probe configsk8s_resource(readiness_probe=)
Express Dependencies Declaratively
- Port conflicts: fix the port allocation source, don't pick a different port
- Resource ordering: use
, not sequential startup scriptsresource_deps() - Env vars: use
or gen-env output, not inline defaultssilo.toml - Image availability: use
orimage_deps
, not sleep-until-readydeps
Tilt Live-Reloads
After editing a Tiltfile, Tilt picks up changes automatically. Never restart
for:tilt up
- Tiltfile edits
- Source code changes
- Kubernetes manifest updates
Restart only for: Tilt version upgrades, port/host config changes, crashes, cluster context switches.
Workflow (When Explicitly Starting Tilt)
Step 1: Assess Current State
-
Check if tilt is already running:
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD) tmux list-windows -t "$SESSION" -F '#{window_name}' 2>/dev/null | grep -q "^tilt$"If running, check health via
and skip to Step 3.tilt get uiresources -o json -
Check for required env files (
,.localnet.env
,.env.local
):silo.toml- If
exists, usesilo.toml
pathsilo up - If gen-env script exists, run it first
- If neither, check project README for bootstrap instructions
- If
-
Check for k3d cluster or Docker prerequisites.
Step 2: Start Tilt in tmux
Follow the
tmux skill patterns:
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD) if ! tmux has-session -t "$SESSION" 2>/dev/null; then tmux new-session -d -s "$SESSION" -n tilt tmux send-keys -t "$SESSION:tilt" 'tilt up' Enter elif ! tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^tilt$"; then tmux new-window -t "$SESSION" -n tilt tmux send-keys -t "$SESSION:tilt" 'tilt up' Enter else echo "Tilt window already exists in session: $SESSION" fi
For silo projects:
silo up instead of tilt up.
Step 3: Monitor Bootstrap
Poll for convergence:
- Wait 10s for initial resource registration
- Poll every 15s, up to 20 iterations:
tilt get uiresources -o json | jq -r '.items[] | select(.status.runtimeStatus == "error" or .status.updateStatus == "error" or .status.updateStatus == "pending") | "\(.metadata.name): runtime=\(.status.runtimeStatus) update=\(.status.updateStatus)"' - Track resources:
->pending
->in_progressok - Success: all resources reach
(orruntime=ok, update=ok
)not_applicable - If resources stabilize in
, proceed to Step 4error
Step 4: Diagnose and Fix Errors
For each resource in error state:
- Read logs:
tilt logs <resource> --since 2m - Read the Tiltfile and relevant k8s manifests
- Identify root cause in the config (not the running process)
- Apply fix following the Principles above
- Tilt live-reloads - re-poll status to verify
After 3 fix iterations on the same resource without progress:
- Report the error with full logs
- Identify whether it's a Tiltfile bug, upstream dependency, or infrastructure problem
- Do not silently skip or disable the resource
Step 5: Report
## Tilt Status: <healthy|degraded|errored> **Resources**: X/Y ok **Session**: tmux $SESSION:tilt ### Errors (if any) - <resource>: <root cause> — <what was fixed or what remains>