An environment file becomes a plan, an approval, and a state record
Top: the captured sbxenv.yaml with its agent, workspace, args, kits, env, lifecycle, and ports keys. An arrow for sbx env plan leads to the plan it printed, eight rows with a plus sign in the margin for each addition, the workspace row that needs approval, the totals line, and the warning that host commands run outside the sandbox. Below, two branches. Left: approval on sbx env create writes the state record under the sbx state directory, and a later plan prints only the rows that moved. Right: the same plan with the env-arg greeting set to servus still prints every row as an addition because nothing was applied.
THE FILE (SBXENV.YAML)
sbxenv.yaml
schemaVersion 1, name m101-env, agent shell, workspace ., args greeting (default hello),
kits ../kits/hello-mixin, env GREETING: ${{ env.args.greeting }},
lifecycle initialize echo init, ports sandbox 8080 host 18083
sbx env plan ./fixtures/env
ENVIRONMENT PLAN m101-env (14-env-plan.txt)
+
kits: source $CAPTURE/fixtures/kits/hello-mixin
workspace: $CAPTURE/fixtures/env (not recorded as applied, needs your approval)
+
env: GREETING: hello
+
sandbox: name m101-env, agent shell
+
ports: sandbox 8080, protocol tcp4, host 18083
+
lifecycle: initialize: command echo init, workdir $CAPTURE/fixtures/env
Plan: + 5 to add, ~ 0 to change, - 0 to destroy.
runs commands on this machine, outside the sandbox, with your own privileges
margin symbols: + add, ~ change, - destroy, > run, ! forget (help-sbx sbx env)
AFTER APPROVAL (NOT CAPTURED)
ONE ARGUMENT CHANGED (CAPTURED)
you answer y on sbx env create
host commands are asked on every invocation
state record, per environment
in the sbx state directory, not by the file
a later plan shows what moved
~ GREETING: hello -> servus, nothing else
sbx env create
records the plan
sbx env plan --env-arg greeting=servus
the arg replaces the default hello
+ env: GREETING: servus
still + 5 to add: nothing was applied
one argument