Installation¶
Seal has two halves, and a project adopts both: an seal
command you install on your machine, and a Tilt extension your project’s
Tiltfiles load straight from this repository. Only the first one is an
install in the usual sense – Tilt fetches the second for you.
Prerequisites¶
Everything below is what Seal drives rather than what Seal is, so install them the way you normally would on your platform.
Tool |
Why it’s needed |
|---|---|
Builds every service’s image. |
|
What |
|
Talks to the cluster; reset scripts use it too. |
|
Installs and runs the |
|
|
Copies test results out of the running containers. Present on most systems already. |
Your store’s own CLI |
Only if a service’s |
You also need a local Kubernetes cluster, with kubectl’s current
context pointed at it. Docker Desktop ships one – enable Kubernetes in
its settings and the docker-desktop context appears; minikube, k3d, Rancher
Desktop and kind all work the same way. Tilt refuses to deploy to a context
it doesn’t recognise as local, so an accidental kubectl config use-context doesn’t put your work on a real cluster.
Check what you’re pointed at before the first run:
kubectl config current-context
Note
CI is where the cluster is throwaway rather than yours, so it creates one per run rather than reusing a developer’s: the reusable workflow uses ctlptl + kind. Nothing about a project depends on which of the two shapes it’s running against.
Installing the seal CLI¶
The repository is public, so uv can install the CLI straight from it. The
package lives in the repository’s python/ subdirectory:
uv tool install "git+https://github.com/vdel/seal#subdirectory=python"
Check it worked:
seal
With no arguments seal prints its usage and exits non-zero, which is
enough to tell you it’s installed.
Without installing¶
uvx runs the CLI from a temporary environment, which is worth reaching for
in a one-off shell or a CI job that already has uv:
uvx --from "git+https://github.com/vdel/seal#subdirectory=python" seal up
From a checkout¶
If you’re working inside a clone of Seal itself – or developing
against a fork – point uvx at the directory instead, so you always run
the code as it is on disk:
uvx --from ../../python seal up # from examples/angular-django/
Pinning a version works the way it does for any git dependency:
uv tool install "git+https://github.com/vdel/seal@v1.2.3#subdirectory=python"
Registering the Tilt extension¶
The Starlark half isn’t installed. Your project’s own root Tiltfile
registers this repository as a Tilt extension
repo once, near the top, and Tilt
fetches it:
v1alpha1.extension_repo(name='seal', url='https://github.com/vdel/seal')
v1alpha1.extension(name='seal', repo_name='seal', repo_path='tilt/seal')
load('ext://seal', 'seal_service', 'select_k8s_overlay')
That is the whole registration. Anything else Seal needs – the
official syncback extension, its own CI-cached build helper – it reaches
for itself, under names of its own, so the name you pick here is free and
nothing you register can collide with it.
Registration is session-wide: every Tiltfile your root one include()s
afterwards, at any nesting depth, can load('ext://seal', ...)
directly with no relative-path bookkeeping.
Developing the extension itself¶
Point url at a file:// path and Tilt picks up local, uncommitted edits:
v1alpha1.extension_repo(name='seal', url='file:///path/to/seal')
The worked example does exactly this, computed from config.main_dir rather
than hardcoded, because it lives inside this repository. A project that
forked Seal into its own repository uses its fork’s URL instead.
Installing the agent skills¶
Optional, and it installs into your repository rather than onto a machine: a
repository built on Seal can carry the instructions a coding agent
reads to use it – what replaces tilt up, what an outcome test is, what
never to edit.
git clone --depth 1 https://github.com/vdel/seal /tmp/seal
/tmp/seal/bin/install-seal-skills --target .
Commit what that writes and every teammate, and every agent session, gets them. See Coding agents.
Next¶
Quickstart runs the worked example end to end.